空中を歩くAIをつくってみる
こんばんは、ごりです。
2か月ぶりの更新です。
今回は飛行AIを作ってみたいと思います。
ナビメッシュだと地上のAIには使えるのに空中にいるAIには使えないんですよね...
上記のようなプラグインも出ているみたいですが、
今回はこのプラグインを使わずに作っていきたいと思います。
そしてナビメッシュも使いません。
UE4をやっている人なら一度は見たことのあるこのノードを使います。
これをつかってビヘイビアツリーのMoveToタスクを作ると、空中のキャラクターも動いてくれるようになります。
作り方は、まずビヘイビアツリーの
[新規タスク]のBTTask_BlueprintBase をクリックして、新しくブループリントクラスを作ります。
クリックするとビヘイビアツリーと同じフォルダに
こいつが作られるので、名前を BTTask_CustomMoveTo
に変更しておきましょう。
変更したらダブルクリックして開きます。
次に関数のオーバライド一覧から
RecieveExecuteAIをクリックします。
タスク開始時の処理を作っていきます。
ブラックボードに移動先の座標が書かれているとして、
[BlackBoard Key Selector]型の変数を追加します。
名前は NextLocation とします。
また移動先までの距離(Length)の変数も追加しておきます。
変数を追加したら下記の画像の通りに、ノードをつないでいきます。
開始時の処理はこれで完了です。
続いて移動処理を書いていきます。
関数のオーバーライド一覧から[Recieve Tick AIをクリックします。
ここで作る処理は、移動後の移動先までの残り距離の割合を計算し、閾値以下ならこのタスクは成功として返す処理となっています。
はい、これで自作のMoveToタスクが出来上がりました。
過去記事のEQSを使って動かしてみました
この時のAIのCharacter Movement はFlyingの状態にしてください。
ちゃんと空中を歩いていますね。
アニメーションを飛行アニメーションに変えたらそれっぽくなるかもしれないですね。
ちなみにこのカスタムMoveToはパス検索などしていないので、現状障害物をよけて進んだりはできません。
障害物をよける処理については、また後日に書きたいと思います。
ではまた。
CEDEC2018で空中のパス探索についての講演がありましたね。
それについても、そのうち実装出来たらと思います。