本日は当ブログ内でご質問頂きました「ワープしたときにAIキャラも連れていきたい」件について方法をご紹介します。
ワープ装置に関してはこちらの記事や動画をご参照ください。
Unreal Engine 5.4で製作しています(UE5.3でも全く同じで動きます。)
前準備:ワープ機能を関数化して何度も使おう
コリジョンにぶつかったことをきっかけにワープしますが、実際にワープさせているのは「Set Actor Location」関係のノードと、その直前の相対位置関係の計算部分でしたね。
この部分を何度も使える「関数」という自作ノードにして、そのノードに入力されたキャラクター(アクターなら何でも可)をワープさせてあげればOKです。
まずは関数にしてコンパクトにしましょう
赤枠部分をそれぞれ範囲選択して右クリックから「関数に折りたたむ」で新しい関数ができます。
上図の一番左のように合流点まで選択に含めると、分岐する前の「Target」が1つの入力ピンになり、含めない場合は2つそれぞれ入力ピンになります。関数化してからでも変更はできますけどね。
NewFunctionじゃあとでわからないので「TeleportFront2Back」(前から後ろにテレポート)的な名前に変えておきました。
出来立ての関数の中はこうなっています
「Return」という関数の終わりのノードを末尾につなぎます。
後ろ側にぶつかったときのワープ処理も同様です。
ワープ装置レベル3くらいまではほとんど同じですが、レベル4以降の場合はキャラクター自体を動かす部分だけを関数化しましょう。
このとき、プレイヤーのコントローラの回転はプレイヤー専用でほかのキャラクター用には必要ないので含めません。
移動速度の反転は今回の紹介では含めていませんが、あったほうがより自然にワープするかもしれません。
他のキャラクターもワープさせよう
冒頭と同じ話ですが、ワープ装置と接触しているかどうかには関係なく、プレイヤーがワープ装置に接触したときのワープ装置と一緒にワープさせたいキャラクターの位置関係はプレイヤーと同じ計算でできます。
なので、ワープさせる処理は、ワープさせたいアクターをさきほど作った関数に入力するだけでOKです。
ここではだれを一緒にワープさせたいかがわかっているものとして単純に「Get Actor Of Class」で「BP_Tama」クラスを指定して、玉ねぎちゃんを連れていく仕様としています。
一緒にワープさせたい敵や味方が数人ならこれをどんどん挟めばよいですし、もっと大勢ワープさせたい場合は、For-loopやFor-Each-loopなんかを使うことになるかと思います。
また、検索はやや重めな処理らしいので、何度もやらずにBeginPlayでやれる状況なら、やって変数に保存してそれを参照するとよいと思います。
おわり
あえて光の反射でワープしたことがわかる状態で後ろから後ろにワープするとこんな感じです。
見切れていますがワープした瞬間も玉ねぎ頭が着いてきてますね。
コメント
よっしーさん記事にして頂きありがとうございました!
とても助かりました!
今後ともお世話になります^^