概要
AIの設計や学習をしてて、身について知見をまとめます。
一つだけだと数行で終わってしまうので、いくつか書いてみます。
毎回実行してほしいタスクを作る
※もっといいやり方があったら知りたいです!
事前 SelectorとSequencerについて
処理分岐に関して、SelectorとSequencerというのがあります。
分かりやすい情報⇒https://historia.co.jp/archives/29055/
今回は、敵が攻撃する対象に優先度をつけ、発見した対象に対して近づいて攻撃するような仕組みを行うため、Selectorを用いてます。
以下のような形で分岐させてます、そのうえでこの記事を書いていきます。
※ルートがNoneなのは画像用です。
1.BTTask_BlueprintBaseを継承して新しいタスクを作成
雑に「NewBlueprint」という名前のタスクにしておきます。
2.Receive Execute AIをオーバーライドして作成
3.Finish Executeを呼び出してノードをつなげる
今回用いているのはSelectorのため、Successはチェックを入れないままにしておきます。
4.タスクをビヘイビアツリーでつなげる
Selector先で一番最初にタスクが実行されるようにすれば、必ず処理されるようになります。
アクターのBPに通知する
タスクからインターフェースを利用してアクターに通知させて処理を実行させてます。
事前 インターフェースについて
分かりやすい情報⇒https://zenn.dev/posita33/books/ue5_starter_cpp_and_bp_001/viewer/chap_03_bp-interface
1.インターフェースを作成
2.関数を作成
ブループリントを開くと関数名を決めさせられるので、「DoPlay」としておきます。
3.アクターとタスクにインターフェースを追加
アクターBPとタスクBPのクラス設定を編集からインターフェースの追加をします。
4.アクターに「DoPlay」のイベントを呼ぶ
インターフェースを追加したことにより、イベントの追加が行えるようになりました。
試しに処理をこうやって置いておきます。
5.タスクで「DoPlay」を実行
メッセージのほうで「DoPlay」を呼んで実行させるようにします。
タスクはさっきやってたものです。