top of page

【UE4/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 第1回~BPで移動する~

更新日:2020年10月10日

こんにちは。夏隣です。

UE4で「空中」で移動するAIを作成していきます。

どうせならビヘイビアツリーも使いたいなとも思います。


↓今回使用している機能を使ったウォーキングシューティングゲームを作っています。よかったら無料ですのでぜひ遊んでみてください!感想お待ちしているのじゃな!



目次

1.仕様環境

2.手順

3.なぜビヘイビアツリーでやらずにBPなの?

4.空中で使用できる移動ノードを知ろう

5.空中で移動するBPをまず組んでみよう

6.最後に



1.仕様環境

OS:win10

UE4:4.25.3

仕様テンプレート:ThirdPerson



2.手順

まず完成図を共有します。

今回の完成図はこちら。

空中(Flying)で移動するBPを作成し、プレイヤーを追いかけるという動作を行います。


今回はいきなりビヘイビアツリーで組むのではなく、まずBPを組んでその後ビヘイビアツリーを組みたいと思います。



3.なぜビヘイビアツリーでやらずにBPなの?

ビヘイビアツリーは初見の方ではとっつきにくいと考えています。(私はそうでした)

ビヘイビアツリーではデフォルトで多くの機能を持っており、便利だと思います。

多くの参考書や動画サイトでも豊富にチュートリアルがあります。

しかし、こと「空中(Flying)」に限って言えば動作しないものが多く存在するからです。


代表的なものを挙げれば、「ナビメッシュ」が機能しません。そのため、「ナビメッシュ」に依存した動きである「simple move to ~」ノード・「AI move to」ノードが使えません。(但し有料アセットで空中にナビメッシュを作成できるものがありますよ)


これはほとんどの参考書で使用された移動パターンが使えないことでハードルが上がっている原因であると考えています。


そのため、まずは「空中(Flying)」でBPで移動できる方法を実装し、理解する必要があると考え、まずはその方法を連携します。



4.空中で使用できる移動ノードを知ろう

まずUE4での移動系のノードについてはこちらが参考になります。


「Simple Move To Actor」「Simple Move To Location」「AIMoveTo」が空中では使えません。私は「参考書の通りやったのに出来ないじゃん!」とここで2週間もんもんとしてこちらにたどり着きました。上記以外から移動するノードを使いましょう。


今回使うのは「AddMovementInput」ノードです。下記元記事より抜粋します。

"「AddMovementInput」
Accelerationが考慮される。Taskで瞬間的に呼んでしまうとほんの少ししか移動しない上にスピードがいつまで経ってもでないのでService等で毎フレーム呼ぶかDelayで少し待ってからFinishExcuteを呼ぶ等の工夫をする"

また移動系のノードは「MoveToLocationorActor」でも上手くいくようです。

私はそちらの方が上手くいかなかったので、うまく言った方は情報いただけると助かります。


では早速作っていきましょう。

使用するテンプレ―トはサードパーソンです。

プロジェクト名は任意で構いません。


5.空中で移動するBPをまず組んでみよう

まずは「ThirdPersonCharacter」BPを複製します。

名前は「BP_AI_Enemy」としました。


「BP_AI_Enemy」を開き、イベントグラフタブを表示します。

インプットの移動系が入っていますが今回は不要です。全て選択し削除しましょう。


ビューポートタブに移動します。

左上のコンポーネントタブから「CharacterMovement」を選択し、右の詳細タブからDefault Land Movementを「Flying」に変更します。これでAIキャラクターは地面の移動から空中を移動する動きに変更されました。


次にキャラクターを微調整します。

左上のコンポーネントタブから「Mesh」を選択し、右の詳細タブからトランスフォームの拡大縮小で0.6に変更し小さくします。地面についているのではなく、空中に浮いてる表現をしたいので位置を上のほうに移動させます。マテリアルはお好みで。


その後空中で移動するBPを組んでいきます。イベントグラフタブに戻ります。

今回は好ましくないですが、移動を確認するだけですのでTickノードを使用します。


以下のようにノードを組んでみてください。

簡単に説明すると、自身(AI)とプレイヤーとのオブジェクトの回転がどれくらい必要か「FindLookatLocation」ノードで調べ、その方向に向かって1移動する「AddMovementInput」ノードで行う感じです。


実際に確認してみましょう。レベル上に「BP_AI_Enemy」を配置し実行してみます。

一番初めにある完成動画の通り、キャラクターに向かってくれば完成です。

お疲れさまでした。



6.最後に

空中の移動にはナビメッシュが使えないこと、それに依存した移動系ノードは使えないことの認識が重要です。移動系ノードもたくさんあるのでこの機会に色々触ってみると面白いかもしれません。


また現状としてバグが2つあります。

1つ目はキャラクターが止まらず動き続けるということ。

これはカプセルコリジョンを使用しているため周りを回り続けてしまいます。

2つめはプレイヤーとの距離が近すぎることです。

これではプレイヤーの移動を妨げてしまいます。


次回は上記2点のバグを改善していこうと思うのじゃ~😋


次回

【UE4/AI/ビヘイビアツリー】空中で動くAIを作ってみよう 

第2回~BPで移動を改善する~










閲覧数:819回
bottom of page