はじめに
このBlueprintは、プレイヤーが乗ることで作動する往復移動床を実装します。プレイヤーが床に乗ると目的地へ向かって移動を開始します。目的地に到着後、プレイヤーが再び乗ると今度はスタート地点へ戻ります。
※この記事ではUE5.3.2を使用しています。
※画像はクリックすると拡大表示されます。
今回は、このような処理を作ります。
プレイヤーが乗った時に往復する床
Blueprintクラスを作成
適当な場所でブループリントを作成してください。今回は、コンテンツフォルダ内に作ります。「追加」をクリックして「ブループリントクラス」を選択、「 Actor 」をクリックします。
Acorの名前を「 BP_MovingFloor 」にします。
「 BP_MovingFloor 」をダブルクリックして、ブループリントの編集画面を表示します。
「 + 追加」をクリックします。今回は「StaticMesh」を選択してみましょう。
名前を「 SM_MovingFloor 」に変更します。
「 SM_MovingFloor 」を選択した状態で、左側の詳細「スタティックメッシュ」のプルダウンメニューを開きます。
プルダウンメニューからプロジェクト内のスタティックメッシュを自由に選択できます。また「None」の文字がある四角い部分にスタティックメッシュをドラッグ&ドロップすることで設定もできます。
今回は、「SM_ChamferCube」を使用してみます。
「+追加」で検索して「Box Collision」を追加します。
「SM_MovingFloor」を選択した状態で拡大縮小を「3.0」「3.0」「0.5」にします。
「Box」を選択した状態で、拡大縮小「1.5」「1.5」「10.0」にして位置のZ値を「360」ぐらいして上に移動させます。「Box Collision」を上に伸ばすことでがジャンプしてもプレイヤーと「Box Collision」が重なった状態を維持でき、ジャンプした時の誤作動を防げます。
※以下の図のように「SM_MovingFloor」の下の階層(親子関係)に Box(Box Collision)を追加する必要があります。下の階層に無い場合「SM_MovingFloor」が移動してもBox(Box Collision)が追従しません。
下の階層(親子関係)にするには、Boxを「SM_MovingFloor」にドラッグ&ドロップするか、「SM_MovingFloor」選択した状態で「+追加」、「Box Collision」を追加すると下の階層に追加されます。
Blueprintの処理を作成
「 Box」を選択して「イベントの追加」の「 On Component Begin Overlap 」を追加します。
「イベントグラフ」に切り替わり、ブループリントのノードが追加されます。
「 On Component Begin Overlap 」は、何かが重なった時に、実行される処理です。
この場合は、( Box )となっているので「 Box 」に何かが重なった時に実行されます。
何もない所で右クリック、「 Get Player Character 」を追加します。これでプレイヤーを取得できます。
「Other Actor」から「Equal」を追加します。「=」で検索しても表示されます。
「Equal」や「Delay」と「Branch」を以下のように繋ぎます。「Delay」の「Duration」を「0.5」に設定します。プレイヤーが乗った時にすぐ動き出さないように「Delay」で0.5秒後に動き出すようにします。
「変数」の左のボタンを押して「StartLocation(Vector型)」「EndLocation(Vector型)」「IsAtStart(Boolean型)」の変数を作成します。
「StartLocation(Vector型)」はスタート地点、「EndLocation(Vector型)」は目的地、「IsAtStart(Boolean型)」は移動の判定に使用します。変数名は自由に決めてもらっても構いません。
「EndLocation(Vector型)」のデフォルト値に目的地の値を入力します。今回はY方向を「500」にします。
「IsAtStart(Boolean型)」のデフォルト値にチェックを入れます。
「IsAtStart(Boolean型)」を「Ctrl キー」+ドラッグをしてイベントグラフに追加します。
変数をドラッグ&ドロップすると「Get」か「Set」を選択できます。また、ショートカットキーでも行えます。
- Get: 変数の現在の値を取得して使用する
Ctrl キーを押しながら変数をグラフ上にドラッグ - Set: 変数に新しい値を割り当てる
Alt キーを押しながら変数をグラフ上にドラッグ
「IsAtStart(Boolean型)」のピンから「AND Boolean」を選択します。
以下のように繋ぎます。プレイヤーが重なった時、かつ「IsAtStart(Boolean型)」がオンの時は「Branch」の「True」が実行されるようになります。
「Branch」の「True」から「Add Timeline」を追加します。
Timelineの名前は自由ですが、今回は「MovementTimeline」にします。
「Branch」の「True」を「Play」に
「Branch」の「False」を「Reverse」にそれぞれ繋ぎます。
「プレイヤーが乗った時に再生または逆再生する」のようなコメントは、ノードを選択した状態で「C キー」を押すとコメントを追加できます。
- 個別選択
- Ctrlキーを押しながら、対象のノードを1つずつクリックして選択します。
- 範囲選択
- マウスをドラッグして、対象のノードを囲むように選択します。
「MovementTimeline」をダブルクリックして、Timeline Editorを開きます。
「長さ」を「2」に設定して「+トラック」をクリック。「フロートトラックを追加」を選択します。
「フロートトラック」の名前は自由ですが、今回は「Alpha」にしました。
右クリックでキーを追加するか、Shiftキーを押しながらクリックするとキーが追加されます。
最初のキーは時間「0」、値「0」に設定します。
次のキーを追加して、時間「2」、値「1」に設定します。赤枠の左のアイコンで全体を表示できます。
「StartLocation(Vector型)」と「EndLocation(Vector型)」を「Ctrl キー」+ドラッグでイベントグラフに追加します。
「Lerp(Vector)」ノードを追加して以下のように繋ぎます。
「Set Relative Location(SM_Moving Floor)」ノードを追加して以下のように繋ぎます。
これで「StartLocation(Vector型)」の値から「EndLocation(Vector型)」の値までアクタの位置が移動します。
「Branch」を追加します。
「IsAtStart(Get)」を「Ctrl キー」+ドラッグをしてイベントグラフに追加します。
「IsAtStart(Set)」を「Alt キー」+ドラッグをしてイベントグラフに追加します。
以下の画像のように繋げてください。
「Branch」の「False」と繋いだ「IsAtStart(Set)」の「Is at Start」にチェックを入れます。
以下の画像が完成したブループリントです。※画像はクリックすると拡大表示されます。
- スタート地点から目的地までの移動は「IsAtStart(オン)」になっています。
- 目的地に着くと「TImeline」の「Finished」ピンが実行される。
- 「Finished」ピンと繋がっている「Branch」は、「IsAtStart(オン)」の時は「True」が実行され「IsAtStart(オフ)」に切り替えます。
- 「IsAtStart(オフ)」の場合「Timeline」の「Reverse」が実行され目的地からスタート地点に逆移動が実行されます。
- スタート地点に戻ります。「IsAtStart(オフ)」の為、「Finished」ピンと繋がっている「Branch」は「False」が実行され「IsAtStart(オン)」に切り替わります。
- 再びスタート地点から目的地までの移動します。
それでは、レベルにアクタを配置してみましょう。
完成動画がこちらです。
まとめ
この記事では、プレイヤーが乗ることで作動する往復移動床を実装しました。プレイヤーが床に乗ると目的地へ向かって移動を開始します。目的地に到着後、プレイヤーが再び乗ると今度はスタート地点へ戻ります。
IsAtStart変数を用いて現在の移動方向を管理することで、スムーズな往復動作を実現しています。この仕組みにより、プレイヤーの操作に応じて柔軟に動作する、インタラクティブな移動床が作成できます。
書籍で学びたい方はこちら >> UE5 おすすめ本 3選!初心者必見!
コメント