目次
はじめに
注意
UE5Preview2の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
Preview2になりReal型が従来のfloatに戻りました。
バージョンアップ時に自動的に置き換わるので問題ないですが、
従来の記事ではfloatに置き換えて実装してください。
親や先生に勉強をしろと言われて、子供がしぶしぶ勉強する構図はたいていの人が体験したことだとおもいます。今回はアクタを2つ用意して命令する側(BP_Transmitter)が命令される側(BP_Receiver)を制御するブループリントを作成します。
解説
①新規ブループリントの作成
前回のプロジェクトから、BP_Receiverのブループリントを複製します。
コンテンツブラウザからBP_Receiverを選択し、Ctrl+D
名前をBP_Transmitterに変更します。
この2つを使って
BP_Receiverは情報の受け取り
BP_Transmitterは情報の送信を行います。
②BP_Transmitterの改造
まずは見た目を変えましょう。
BP_Transmitterを開き、StaticMeshをCylinderに変更します。
またこのブループリントの変数と関数、イベントグラフ上のノードのイベント(赤いノード)以外を削除します。
コンパイルもしておきましょう。
③BP_Receiverの改造
このブループリントではBP_Transmitterから受け取った情報をもとに指定時間移動するという処理を記述します。
関数内では時間系のノードを利用できないのでイベントグラフに新規イベントとして作成します。
何もないところで右クリックし t. と検索します。
するとカスタムイベントを追加....という項目があるのでクリックしましょう。
名前をMoveEventとします。
カスタムイベントはBeginPlayやTickと同じようにイベントノードなので赤い色をしています。このノードを呼ぶことでピンから実行処理が走ります。
移動するには移動する時間とベクトルが必要なので
カスタムイベント内のインプットに作成します。
今回はGateノードを使用します。
以下のようにノードを組みましょう。
Sequenceノード実行ピンを分割する。
Then 0 1 2....の順番で実行される。
Gateノード
信号を流すかどうかを実行ピンのみで行うノード
基本的にはEnterに流れる入力信号をExitに流す。
OpenだとExitに流れるが
Closeだと流れない。
組み終わったらこのイベントを使用してみましょう。
BeginPlayのノードを切断して作成したノードにつなげます。
時間とベクトルを入力するとその通りに実行されるはずです。
確認出来たらBeginPlayはなにも接続しないようにします。
④BP_TransmitterからBP_Receiverを制御する
本日の本題です。
異なるアクタ間でイベントや変数をやりとりすることでお互いに制御することができます。
BP_ReceiverはBeginPlayから切断したので単体では移動することができません。
しかし移動するというイベントを外部から呼べば動くことができるはずです。
実際にやってみましょう。
BP_Transmitterを開きます。
以下のようにノードを組みましょう。
※注意※ActorClassの設定を忘れないようにしましょう
GetAllActorsOfClass
レベル上(アウトライナー)のActorClassと同じアクタをすべて取得し、アクタの参照を配列(同じ変数のまとまり)に出力します。
is Vaild
InputObjectに流れたものが存在するかをチェックします。
存在する場合は上のピンない場合は下に流れます。
コンパイル後レベルに戻り、BP_Transmitterをレベル上に配置します。
実行して確認してみましょう。
BP_TransmitterがBP_Receiverのイベントを呼び出したことで移動していたら成功です。
BP_Transmitterがレベル上にいるBP_Receiverを取得することを参照を持つといいます。
BP_Receiverの参照をもったBP_Transmitterは特殊なケースを除きすべての変数やイベントを呼び出すことができます。
今回は命令される側の移動イベントに変数を入れるようにしましたが、
前回と同じようにあらかじめTickで移動させておいてAddVelocityの内容を上書きすることで移動量を制御することも可能ですが、その辺りは作成するゲームの設計にあった手法を取りましょう。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。