はじめに
前回の~①詳細から対象を選択する編~の続きです。
まだ見ていない方は先にそちらをご覧ください。
さて、前回は新規ブループリントの作成とマップから選択したオブジェクトの情報を取得するところまで行いました。
今回はマップから取得する動作を自動に行いたいと思います。
Unreal Engine 4で極めるゲーム開発 サンプルデータと動画で学ぶUE4ゲーム制作プロジェ [ 湊和久 ] 価格:4,950円 |
やりかた
⓪事前準備、楽に取得できるようにしておこう
この工程は行わなくても問題ないですが、
今後作業を楽にしていくためなので実装しておくことをお勧めします。
FirstPersonCharacterを開くと
ターゲットを取得するノードがあると思いますが、
取得する際に変数ごとにゲットするようになっています。
まとめて取得できたほうが何かと便利なので、
関数という仕組みをターゲット側に作成してまとめられるようにしていきましょう。
▲ゲットしてる場所
Cube_Blueprintを開きます。
イベントグラフを開き関数、GetTargetInformationを作成します。
作成したら、このようにノードを組みます。
リターンノードは関数の詳細の+ボタンから変数を追加すると作成できます。
純粋にチェックを入れておきます。
こうすることで実行ノードをつながなくても関数を使用することができます。
FirstPersonCharacterに戻り
TargetActorから紐を引っ張り作成した関数を呼び出します。
再度接続します。
関数化することでノード数が減り、管理しやすくなります。
Unityだと戻り値のあるメソッドですね。
①マップ上にあるかどうかで自動で目的のアクターを取得してみる。
本命の自動アクター取得です。
FirstPersonCharacterを開きノードBeginPlayを作成しましょう。
作成されているときは自動的にそのノードに移動します。
既存のノードを残したまま作業したいので、
検索からSequenceノードを作成して
実行ピンを分割します。
次にGetAllActorsOfClassを作成します。
このノードはマップ上のアクターを全検索して任意のクラスと同じものを配列で返します。UnityでいうとGameObject.Findに相当します。
UnityでFind系を使ったことがある方は分かりますが、このノードは非常に重いため、毎フレーム呼ばれる処理で書くべきではありません。
そのためBeginPlayで一度のみ呼ぶようにしています。
以下のように組んでみましょう。
配列で返ってきたCube_Blueprintのアクターの一番上(一番初めに見つかったオブジェクト)を、
Is Vaildという存在するかどうかのノードで分岐させて
作成したTargetActorに流しています。
ここまで出来たら変数targetActorの公開設定をなくしておきましょう。
(右側の目のアイコンですね)
これをすることで前回マップ上から設定した項目はなくなり
設定できなくなります。
実行して前回設定したキー(解説では@かF)を押すと
しっかり取得できていると思います。
今回はここまでです。
次回は特定の条件(プレイヤーが触れたとき)などに
情報を返すようする編を書こうと思います。
それではまた別の記事で!
さいごに
次回は特定の条件(プレイヤーが触れたとき)などに
情報を返すようする編を書こうと思います。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではまた別の記事で!