レベルを作る⑨ ブループリントによる入り口 (Part 1)

ビデオの内容紹介 いよいよブループリントを使ってドアを開閉するアニメーションを設定していきます。この巻では、まずドアを作動させるセンサーを設置して、そのセンサーが感知した時の処理をブループリントで組み立てます。その後は後編の⑩に続きます。

原題 Creating a Level – 9 – Blueprint Doorway Pt1

センサーを配置する (0:50)

スロー エディタ内左上ModesをPlace(左端アイコン)に → BasicからBox Trigger(センサー)をビューポート内のドアにくっつけるようにしてドラッグアンドドロップ → Fキーを押す(フォーカスする) → 回転させて(Alt+左クリック+ドラッグ)、ドアに接していることを確認 → ズームイン(Alt+右クリック+ドラッグ) → 適度な大きさにスケール (Details/Shape/Extent Property(範囲プロパティ)で大体X=90、Y=113、Z=148?くらいに)

キーワード トリガー(trigger): 元の意味は「銃の引き金」(弾丸を発射させるもの)。ブループリントでは、「何らかの動作や効果を引き起こすもの」くらいの意味です。

メモ ①Alt+左クリック+ドラッグによる回転では、回転軸がカメラ(ファーストパーソン・シューティング・ゲームなので私たち)ではなく、今見ている物のあたりになります。つまり、円の中心にカメラ(私たち)が見ている物があり、その円の円周の上をカメラが回転します。一方、右クリック+ドラッグによる回転は、カメラ自身が円周を回るのではなく、今いる場所から移動しないでその場で回転します。②TriggerBoxがドアに接していることを確認しましたが、最終的には範囲を広げてドアを包み込むようにしています。

カメラを物の周囲で回転させる方法 (1:15)
スロー Alt+左クリック+ドラッグ

レベル・ブループリントを開く (1:59)
スロー ビューポートの上アイコン群左から6番目Blueprints → Open Level Blueprint → (Level Blueprint Editorが開きます)

メモ 最初にこのプロジェクトを作った時(第②巻)、TP_FirstPersonBPというテンプレートを利用しました。この「BP」とはブループリントのことでした。ようやく、ここでブループリントの登場となったわけです。

センサーが作動した時の動作をブループリントで設定する (2:23)

スロー 先に作ったTriggerBoxをビューポート内で選択(左クリック) → Level Blueprint Editor中央あたりで右クリック → Add Event for TriggerBox(TriggerBoxのためのイベントを追加する)を展開(ダブルクリック) → Collisionを展開 → OnActorBeginOverlapを左クリック(エディタ内にノードができる) → 再度Level Blueprint Editor中央あたりで右クリック → Add Event for TriggerBoxを展開(ダブルクリック) → Collisionを展開 → OnEndOverlapを左クリック(エディタ内にノードができる)

キーワード ノード(node): 何らかの役目をもつブループリントの基本的な要素で、他のノードと連携を取りながら全体でまとまった動作や効果を作り出します。
グラフ(graph): ノード(node)が集まったものです。言い換えれば、ノードのネットワークがグラフです。
イベントノード: ゲーム内の何らかの動作に連動して、何らかの反応をトリガーするもの。たとえば、ある範囲にプレイヤーが入ったら、そのことがトリガーとなってドアが開くなど。
コリジョン(collision): あるものとあるものが衝突することです。コリジョンが生じるかどうかを判定することをコリジョン判定とか衝突判定といいます。
OnActorBeginOverlap: onはこの場合「~の時(すぐに)」なので、「アクタが(TriggerBoxと)重なり始めた時すぐに」という意味になります。つまり、アクタがある範囲に入った時にどうなるか制御するためのものです。OnActorEndOverlapは「アクタが(TriggerBoxと)重なるのを止めた時すぐに」です。

メモ ここに配置したノードの働き(意味)をまとめておきます。OnActorBeginOverlapは、TriggerBoxをビューポート内で選択してから作ったものなので、TriggerBoxのためのものです(TriggerBoxと関連づけられています)。だから、アクタがTriggerBoxと重なり始めた時すぐにOnActorBeginOverlapは、(イベントノードなので)何かをトリガーします。その何かというのは、次に作るタイムラインです。なお、OnActorEndOverlapは、その逆で、アクタがTriggerBoxと重なるのを終えた時すぐに、何かをトリガーします。

センサー作動時にトリガーされるものを設置する (3:12)

スロー Level Blueprint Editor中央あたりで右クリック → Add Timelineを左クリック → Timeline_0となっている部分に独自の名前を入れて(ビデオでは「Sliding Door Timeline」)エンター

キーワード タイムライン(Timeline): 時間とともに変化するアニメーションを設定するためのノードです。

メモ 名前の入力に失敗した場合は、Timeline上で右クリックしてRenameからもう一度行います。

センサーとタイムラインをつなげる (3:37)
スロー OnActorBeginOverlapの中にある白いピン(マウスオーバーするとexecと表示される)をSliding Door TimelineのPlay(再生)ピンにつなげる → OnEndOverlapの中にある白いピンをSliding Door TimelineのReverse(逆再生)ピンにつなげる

メモ Play(再生)は、ドアが開く動作をアニメーションすることです。また、Reverse(逆再生)はそのアニメーションを逆再生することなので、ドアが閉まることになります。

ドアをどのくらい開くかを決める (4:01)
スロー ビューポートに戻る → ビューポート内右上アイコン群左から6番目位置のスナップ値を10に → ドアを選択(左クリック) → ドアを適当な場所までX軸方向にドラッグする(その際、ドラッグした回数を数える) → ビデオでは10×13=130になった

メモ 10×13を計算したのは、ドラッグ1回につき、スナップ値10単位ずつ移動し、全部で13回ドラッグしたためです。この「だいたい130」という値が後に使われることになるのですが、実際には120が使われることになります。

ドアの開き方を細かく設定する (4:47)
スロー グラフに戻る → タイムラインをダブルクリック(これでTimeline Editorのタブが開かれて、アニメーションカーブを編集できるようになります) → 左上V(ベクタトラック)を左クリック → (赤緑青のボタンのうち赤[X]にチェックがあることを確認) → (キーフレームを作成するために)タイムラインの先頭にカーソルを当ててShiftキーを押しながら左クリック → (上方に入力欄が表示されるので)index 0の右隣[時間]とさらに右隣[距離]の欄に0を入力 → (もう一つキーフレームを作るために)タイムラインの適当な場所(ビデオでは中央くらいに)でShiftキーを押しながら左クリック → index 1の右隣[時間]に1.35と入力(アニメーションの時間) → さらに右隣[距離]に120と入力 → (隠れてしまったキーフレームを表示するために)indexの左横にある「上下の矢印」(Zoom to Fit Vertical=垂直方向が適切に表示されるようにズームする)と「左右の矢印」(Zoom to Fit Horizontal=水平方向が適切に表示されるようにズームする)をクリックする → (入りと終わりがスムーズなアニメーションとするために)両方のキーフレームを選択する(Ctrlキーで) → そのまま右クリック → Cubic-auto を選択 → (アニメーションの期間を設定するために)Use Last Keyframe(最後のキーフレームを使う)にチェックを入れる → (トラックの名前を変更するために)NewTrack_1を右クリック → Rename → (ビデオでは)Door Locationと入力 → Sliding Door Timelineのタブを閉じる

メモ Timeline Editorで赤[X]にチェックを入れるのは、ドアを動かす方向がX軸だからです。

キーワード アニメーションカーブ(animation curve): アニメーションを制御するために使う「値」が時間経過とともに変化する様子を視覚化したものです。たとえば、ドアを開くアニメーションでは、ドアの位置という「値」を、時間軸に沿ってカーブとして描きます。この「値」のカーブの形は変える(編集する)ことができます。この「値」は物の位置を変えるために利用されます。それが、アニメーションの動きになるわけです。
ベクタ(vector): たとえば、(5,2,4)のような値のセットです。アニメーションする物のXYZ位置を表すことができます。ベクトルのことです。
キーフレーム(key frame): アニメーション(アニメーションカーブ)で中心となるフレーム(コマ)のことです。たとえば、ドアが開くアニメーションでは、ドアが閉じられている状態のコマと全開した時のコマをキーフレームとします。Timeline Editorで、キーフレームとキーフレームの間にあるべきたくさんのフレーム(コマ)が自動的に作成されます。これを補間と言います。キーフレームとキーフレームの「間を補う」ということですね。したがって、キーフレームを設定すれば、Timeline Editorが補間してくれるので、楽ちんということになります。
Cubic-auto: cubeは元々、立方体という意味ですが、cubicのここでの意味は三次関数のことで、補間の方式を言っています。

メモ ここに配置したノードの働き(意味)をまとめておきます。OnActorBeginOverlap(アクタがTriggerBoxと重なり始めた時すぐに)とSliding Door Timelineを結んだことにより、OnActorBeginOverlapがSliding Door Timelineをトリガーすることになります。つまり、誰かがTriggerBoxに足を踏み入れると、Sliding Door Timelineノードが作動することになります。Sliding Door Timelineが作動すると、その内部でアニメーションカーブのとおりにドアの位置という値が時間とともに変化します。ただし、このままではドアは動きません。⑩巻で設置するSetActorLocationという関数が必要となります。


お疲れ様でした。

About なつのや

アンリアル・エンジン 4 を基礎から勉強するためのサイト「UE4 の学び部屋」を開いています。どうぞよろしくお願いいたします。
レベル

2 responses to レベルを作る⑨ ブループリントによる入り口 (Part 1)


  1. 匿名

    動画が違ってますよ、修正しないのですか?

    • なつのや

      ご指摘、ありがとうございます!大変助かりました。今後もよろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>