愛をもってゲームをつくるゴリラのブログ

UE5勉強中のゴリラがいろいろ頑張ります。

空中を歩くAIをつくってみる

こんばんは、ごりです。

2か月ぶりの更新です。

今回は飛行AIを作ってみたいと思います。

ナビメッシュだと地上のAIには使えるのに空中にいるAIには使えないんですよね...

 

www.unrealengine.com

 

上記のようなプラグインも出ているみたいですが、

今回はこのプラグインを使わずに作っていきたいと思います。

そしてナビメッシュも使いません。

 

UE4をやっている人なら一度は見たことのあるこのノードを使います。

  

f:id:m-goolee-y:20180903194747p:plain

 

これをつかってビヘイビアツリーのMoveToタスクを作ると、空中のキャラクターも動いてくれるようになります。

 

作り方は、まずビヘイビアツリーの

f:id:m-goolee-y:20180903193338p:plain

[新規タスク]のBTTask_BlueprintBase をクリックして、新しくブループリントクラスを作ります。

クリックするとビヘイビアツリーと同じフォルダに

f:id:m-goolee-y:20180903193533p:plain

こいつが作られるので、名前を BTTask_CustomMoveTo

に変更しておきましょう。

変更したらダブルクリックして開きます。

 

次に関数のオーバライド一覧から

RecieveExecuteAIをクリックします。

f:id:m-goolee-y:20180903201658p:plain

 

タスク開始時の処理を作っていきます。

ブラックボードに移動先の座標が書かれているとして、

[BlackBoard Key Selector]型の変数を追加します。

名前は NextLocation とします。

f:id:m-goolee-y:20180903195323p:plain

また移動先までの距離(Length)の変数も追加しておきます。

変数を追加したら下記の画像の通りに、ノードをつないでいきます。

f:id:m-goolee-y:20180903202739p:plain

 

開始時の処理はこれで完了です。

続いて移動処理を書いていきます。

関数のオーバーライド一覧から[Recieve Tick AIをクリックします。

f:id:m-goolee-y:20180903201535p:plain

 

ここで作る処理は、移動後の移動先までの残り距離の割合を計算し、閾値以下ならこのタスクは成功として返す処理となっています。

f:id:m-goolee-y:20180903203129p:plain

 

はい、これで自作のMoveToタスクが出来上がりました。

 

過去記事のEQSを使って動かしてみました

この時のAIのCharacter Movement はFlyingの状態にしてください。

 

www.youtube.com

 

ちゃんと空中を歩いていますね。

アニメーションを飛行アニメーションに変えたらそれっぽくなるかもしれないですね。

ちなみにこのカスタムMoveToはパス検索などしていないので、現状障害物をよけて進んだりはできません。

障害物をよける処理については、また後日に書きたいと思います。

 

ではまた。 

 

追記

CEDEC2018で空中のパス探索についての講演がありましたね。

それについても、そのうち実装出来たらと思います。