ビヘイビアツリーを使ったAIについて取り組んでみたので、できるだけシンプルにして覚え書き。
やりたいAIは以下の2点
・敵に自分を目標にして移動してほしい
・移動の際に、迷路を解析して障害物を迂回してほしい
これを再現するために必要なことは以下の3点
・迷路のデータ化
・迷路の自動解析
・敵の移動用の思考パターン(探す、走る、休むを繰り返す)の策定
これらをCとかでプログラミングしていく過程を想像する。
・迷路データ:まあ平面の単純なものなら2次元配列で作れる。
・迷路解析:Aスターアルゴリズムあたりで解析。
・移動ロジック:確定した経路を順番に移動させるシーケンス制御をつくる
これらを例えば以下のような仕組みでプログラミングせずになんとかできないか?
・迷路データ
・・・ポリゴンモデルの壁をステージにおいて迷路を直接構成したい
・迷路解析
・・・・・ステージを解析して迷路データを自動作成したい
・移動ロジック
・・・・・探す、移動する、止まる、をフローに書いて動いてほしい
こんな都合の良いツールはゲーム本編の制作よりも大変そうでわがままなんだけど、UE4は各種ツールでこれをフォローして僕のわがままを聞いてくれる。しかも迷路データは2次元じゃなく立体的な交差にも対応していてすごい。
・迷路データ
・・・立方体やポリゴンモデルの壁をステージにおいて迷路を直接構成できる
・迷路解析
・・・ナビメッシュでステージを解析して迷路データを自動作成できる
・移動ロジック
・・・探す、移動する、止まるを「ビヘイビアツリー」に書いて、そのとおりに動かせる
既存のプロジェクト(TwinStickシューター)で実装してみた。
・敵キャラ
・・・キャラのメッシュとAIControllerを割り当てられたPAWN
・AIController
・・・プレイヤーとビヘイビアツリーを関連付けているコントローラー
・ナビメッシュ
・・・迷路データを自動生成するための立方体
・ビヘイビアツリー
・・・AIのタスク(探す、移動する、休む)をフローで設定
・ブラックボード
・・・・各タスク間で情報を共有するためのメモ用紙
ナビメッシュはステージ中の迷路に当たる部分をざっくり立方体で包むことで作ることができる。ビヘイビアツリーでは、探す、移動する、休むの3つのタスクが設定されていて、これらと関連付けられた敵キャラがAIControllerを通じて移動してきます。
これを実現したUE4の極小プロジェクトをおいておきます。
TwinStickシューターに敵キャラを追加して、自分の位置をめがけて移動するサンプルです。目的地に到着したら2秒休んで、また自分の位置を補足する、を繰り返します。
ビヘイビアツリーの極小サンプル
注意するべきは、PAWNで「移動する(MoveTo)」タスクを実行するときはコンポーネントに「FloatingPawnMovement」を追加してやること。敵キャラがCharacterの場合は問題ないが、PAWNの場合はこのコンポーネントを追加しておかないと「MoveTo」できないので注意。
やりたいAIは以下の2点
・敵に自分を目標にして移動してほしい
・移動の際に、迷路を解析して障害物を迂回してほしい
これを再現するために必要なことは以下の3点
・迷路のデータ化
・迷路の自動解析
・敵の移動用の思考パターン(探す、走る、休むを繰り返す)の策定
これらをCとかでプログラミングしていく過程を想像する。
・迷路データ:まあ平面の単純なものなら2次元配列で作れる。
・迷路解析:Aスターアルゴリズムあたりで解析。
・移動ロジック:確定した経路を順番に移動させるシーケンス制御をつくる
これらを例えば以下のような仕組みでプログラミングせずになんとかできないか?
・迷路データ
・・・ポリゴンモデルの壁をステージにおいて迷路を直接構成したい
・迷路解析
・・・・・ステージを解析して迷路データを自動作成したい
・移動ロジック
・・・・・探す、移動する、止まる、をフローに書いて動いてほしい
こんな都合の良いツールはゲーム本編の制作よりも大変そうでわがままなんだけど、UE4は各種ツールでこれをフォローして僕のわがままを聞いてくれる。しかも迷路データは2次元じゃなく立体的な交差にも対応していてすごい。
・迷路データ
・・・立方体やポリゴンモデルの壁をステージにおいて迷路を直接構成できる
・迷路解析
・・・ナビメッシュでステージを解析して迷路データを自動作成できる
・移動ロジック
・・・探す、移動する、止まるを「ビヘイビアツリー」に書いて、そのとおりに動かせる
既存のプロジェクト(TwinStickシューター)で実装してみた。
・敵キャラ
・・・キャラのメッシュとAIControllerを割り当てられたPAWN
・AIController
・・・プレイヤーとビヘイビアツリーを関連付けているコントローラー
・ナビメッシュ
・・・迷路データを自動生成するための立方体
・ビヘイビアツリー
・・・AIのタスク(探す、移動する、休む)をフローで設定
・ブラックボード
・・・・各タスク間で情報を共有するためのメモ用紙
ナビメッシュはステージ中の迷路に当たる部分をざっくり立方体で包むことで作ることができる。ビヘイビアツリーでは、探す、移動する、休むの3つのタスクが設定されていて、これらと関連付けられた敵キャラがAIControllerを通じて移動してきます。
これを実現したUE4の極小プロジェクトをおいておきます。
TwinStickシューターに敵キャラを追加して、自分の位置をめがけて移動するサンプルです。目的地に到着したら2秒休んで、また自分の位置を補足する、を繰り返します。
ビヘイビアツリーの極小サンプル
注意するべきは、PAWNで「移動する(MoveTo)」タスクを実行するときはコンポーネントに「FloatingPawnMovement」を追加してやること。敵キャラがCharacterの場合は問題ないが、PAWNの場合はこのコンポーネントを追加しておかないと「MoveTo」できないので注意。