top of page

【UE5/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 第3回~ビヘイビアツリー実践編~

更新日:2022年6月3日


せっかくなのでUE5でやってくよ。


目次

1.できるもの

2.AIの作成 ~準備~

3.AIの作成 ~タスク~

4.AIの作成 ~ビヘイビアツリー~ 5.完成 6.まとめ


1.できるもの

今回の完成図はこちら。 前回作成のBPと同様のAIの動きが確認できると思います。

開発環境:

・UE5.0.2,Windows10 必要なもの:

・AIコントローラー

・ビヘイビアツリー

・ブループリントインターフェース

・キャラクター

・ブループリントタスク

・ブラックボード ※今回は未使用

分からなくなったらここに戻って必要なものを確認してみてね。



2.【AIの作成】~準備~

まずAIの項目からブラックボードとビヘイビアツリーを選択、作成します。

作成したビヘイビアツリーを「BT_AIFlyCharacter」、ブラックボードを「BB_AIFlyCharacter」と名前を変更します。 「BT_AIFlyCharacter」

今回はブラックボード自体使用しないのですが今後は必ず使用することになりますので事前に用意しておきました。 次に空中で動かしたいキャラクターを用意します。

今回は「BP_ThirdPersonCharacter」を複製し、「BP_AICharacter」を作成しました。MeshをMannyに差し替えて使用しています。

こちらは好きなキャラクターでかまいません。

「BP_AICharacter」

キャラクタームーブメントを選択し「Default Land Movement Mode」を「Flying」に変更します。

動かしたいキャラクターをAIとして設定するにはAIコントローラーをキャラクタークラスに設定する必要があります。AIControllerをブループリントクラスの作成→すべてのクラスからフィルタリングして選択してください。



作成したクラスを「BP_AIController」とします。 「BP_AIController」

AIControllerとビヘイビアツリーを紐づけるには「Run Behavior Tree」ノードを呼び、「Begin Play」ノードに接続してください。BTAssetに作成したビヘイビアツリー「BT_AIFlyCharacter」を選択します。 キャラクタークラスの詳細からAI Controller Classのドロップリストから作成しBP_AIControllerに変更します。

これでキャラクター - AIController - ビヘイビアツリーを紐づけることができました。 動きが止まるときの処理をキャラクター側に先に実装しておきます。 ブループリントからブループリントインターフェースを選択し、「BPI_AICondition」と名前を変更します。

「BPI_AICondition」を開いて、関数横の"+"ボタンを押して新規関数を作成します。「SendCharacterMovementStop」としました。


「BP_AICharacter」に戻ります。クラス設定から実装インターフェースより先ほど作成した「BPI_AICondition」を追加します。これでイベント「SendCharacterMovementStop」が呼べますのでCharacterMovementより「StopMovementKeepPathing」を呼び出しつなぎます。

これで止まる処理が実装できました。

3.【AIの作成】~タスク~

タスクの概要については省略します。詳しく知りたい方はこちらをみてください。 【UE4/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 第2.5回~ビヘイビアツリーの個人的メモ~ 今回は前回BPで作成した部分をタスクとして作っていきますよ。

本来はサービスと併用することで効果を発揮しますが、わかりやすさ重視で今回は処理を一括しちゃいます。

「BT_AIFlyCharacter」※完成図

タスクを作りたい場合はビヘイビアツリーの項目にある「新規タスク」をクリックし、「BTTask_BlueprintBase」を選択することで新規タスクを作成できます。作成したタスクがコンテンツブラウザにありますので「BTT_AirMovementTargetActor」と名前を変更します。



「BTT_AirMovementTargetActor」をダブルクリックで開いてください。

今回は毎秒追いかける処理を作成するため、Tick処理につなぎたいです。関数右にある"+"アイコンから「ReceiveTickAI」イベントをオーバーライドして使います。

タスクの「ReceiveTickAI」イベントについて通常のTick処理と異なりTick間隔を指定できませんので注意してください。詳しくは以下ヒストリア様のリンクに記載されています。

タスクにはやりたい処理を書いていくのですが、なんとタスクは関数!を作ることができます!そのため以前作成した機能を丸々っと移植することができるのです。たまらん。

「AIDistance」 ※画像修正しました (2022/06/03)

「AIMovement」


カスタムイベントも作れちゃいます。 「AITargetRotation」

「ReceiveTickAI」イベントに画像のようにノードをつなぎましょう。動きだけ確認したい方もとりあえず画像の通りにしてもらえれば動きを確認できます。FinishExecuteを最後に呼び出し、Successにチェックをしておきます。今回はあまり意味ないですが、大事なので忘れずに。

ここまでの流れ詳しく知りたい方は昔の記事見てください。記事ではUE4ですがUE5.0.2でも問題なく動くかと思います。 【UE4/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 第1回~BPで移動する~ 【UE4/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 第2回~BPで移動を改善する~

これでタスクの部分は完成しました。


4.【AIの作成】~ビヘイビアツリー~

Sequenceと作成したタスク「BTT_AirMovementTargetActor」を呼び出します。

これで全部の作業が終わりました!


5.完成

楽しい!


6.まとめ

シリーズについては一旦こちらで終わりです。

AIと聞くと想像しづらいかもしれないのですが、BPから作成することで比較してみれることで見えてくるものがあるといいなと思いこのシリーズをまとめました。


今後この機能を拡張するとしたらタスクに一括した個所をサービスに分離したり、ブラックボードに変数を登録して色々挙動を制御したりでしょうか。

要望があればやろうかなと思います。


閲覧数:1,613回
bottom of page