37
幻幻幻幻幻幻幻幻幻幻幻 Behaviour Tree 幻幻幻 2014.01.29 Sindharta Tanuwijaya ( シシシシシ シシシシシシ )

Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Embed Size (px)

DESCRIPTION

株式会社Aimingの中の勉強会で発表した、Behaviour Tree手法についてのスライドです。 幻塔戦記グリフォンというスマートデバイスのゲームに使われています。 http://griffon.sega-aiming.com/

Citation preview

Page 1: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

幻塔戦記グリフォンでのBehaviour Treeの試み

2014.01.29

Sindharta Tanuwijaya

(シンダルタ タヌイジャヤ )

Page 2: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Tree とは• AI のアルゴリズムの1つ– State Machine と目的が似ています

• 目的:ゲーム内のオブジェクトが考えて行動するようにする

• NPC 対戦チュートリアルに使ってみた

Page 3: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machineステート・マシン

Page 4: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machine の振り返り 1/2

• オブジェクトの行動を下記のもので表現する– State– State の遷移 (Event) で表現する

S0E1

S2S1 S3

E2

E3 E4

E5

S: StateE: Event

Page 5: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machine の振り返り 2/2

• 例:爆弾

周囲を探知 爆発

距離 < x消える

アニメーションが終われば

時間 < y

Page 6: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

NPC 対戦チュートリアルにState Machine を使える?

Page 7: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

NPC 対戦チュートリアルにState Machine を使える? 

• NPC 対戦の仕様:1. クリープ (NPC) が前進したときは慎重についていく2. AIは保守的。あまり深く敵を追わない3. タワーを護衛する4. 敵が近ければ、攻撃する。優先度は:

• プレイヤー• クリープ (NPC)

5. HP が減れば、基地に戻る6. 場所に引っかかる場合の対応

• State の数:少なくとも6• 遷移の数:正確には不明だが、多い• 最初一部を State Machine で実装しが、 State Machine の欠点

をよく考えさせられた

Page 8: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machine の欠点  1/2

• State の数が少なければ問題ないが、 Stateの数が増えれば、管理しないといけない遷移は膨大に増える。大雑把に:

?S: 3E: 3

S: 4E: 6

S: 5E: 10

S: 6E: 15

S: 7E: 21

Page 9: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machine の欠点  2/2

• State とその遷移が1つのAIの構造になっているので、再利用性が低い– 例:攻撃する行動は別のAIで実行されてい

ましたが、簡単に使いまわすことができない

S0E1

S2S1

E2

E3

S0Ex

SySx

Ey

Ez

S: StateE: Event

Page 10: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

State Machine の問題のまとめ• 問題点:

1. State の数が増えれば、管理しないといけない遷移は膨大に増える• バグが出やすい• デバッグは難しい

2. 再利用性が低い• 違うやり方で、 NPC 対戦のチュートリア

ルをやろうと考えた– Behaviour Tree

Page 11: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Tree

Page 12: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Tree: 入門• 構造: Tree• Tree のノードはステータスを持ってい

る:– READY: 初期値– SUCCESS: ノードの実行が成功した– FAILURE: ノードの実行が失敗した– RUNNING :ノードの実行がまだ終わってい

ない• 代表的な Behaviour Tree のノードの種類:

– Action  ノード– Selector ノード– Sequence ノード– Decorator  ノード

Page 13: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Action ノード• 一番シンプル:実行するのみ• Tree の Leaf だけ。子は持てない• 例:一番近い敵への攻撃

A

Page 14: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Decorator ノード• ある条件のチェックを行う:

– 通ったら子を実行して、子が返すステータスを返す– 通らなかったら、 Failure を返す

• 子は1つだけ。• 例: HP<10 であれば、一番近い敵を攻撃する

– D: HP<10– A:一番近い敵を攻撃する

A

D

Page 15: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Selector ノード• 成功する子が見つかるまで、子を1つ1つ実行する。

– 見つかったら、処理を止めて、 Success を返す。– 見つからなかったら、 Failure を返す

• 例:– 一番近い敵を攻撃する– 敵がいなかったら、クリープを付いていく– クリープがいなかったら、待機する

A

Sel

A A

Page 16: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Sequence ノード• 順番に子を実行するノード

– 子が成功したら、すぐ Running を返す。次のフレームの Update で次の子を実行する

– 子が失敗したら、すぐ Failure を返す– すべてのノードを実行し終わったら、 Success を返す

• 例:ある位置に移動して、着いたらしばらく待機する

A

Seq

A

Running

A

Seq

A

フレーム1 フレーム 2

A A

Ready

Page 17: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Tree の Update のルール• 毎フレームではなくてもよいが、定期的に

Update• RUNNING じゃないノードのステータスを

READY にしてから、 Root から Update する– 再帰的

Page 18: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Page 19: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Tree の例• HP が 10 より大き

ければ、一番近い敵を攻撃する。最大距離:5 m

• 敵が見つからなかったら、一番前のタワーに移動して、待機する

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

Ready

Page 20: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

HP 最大で、敵も近くにいる場合

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

Ready

RunningSuccess

Failure

Page 21: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

HP 最大で、敵も近くにいない場合

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

Ready

RunningSuccess

Failure

Page 22: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

まだタワーついていなかったら、そのまま行く

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

Ready

RunningSuccess

Failure

Page 23: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

タワーについたら、待機

5m 以内の敵を攻撃

Sel

一番前のタ

ワーに行く

待機

HP>10

Seq

Ready

RunningSuccess

Failure

Page 24: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

全体の流れ• Update のルール– 毎フレームではなくてもよいが、定期的

Update – RUNNING じゃないノードのステータスを

READY にしてから、 Root から Update する• 再帰的

• ずっと繰り返す

Page 25: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

NPC 対戦チュートリアルのBehaviour Tree 1/2

• NPC 対戦の仕様:1. クリープ (NPC) が前進したときは慎重につい

ていく2. AIは保守的。あまり深く敵を追わない3. タワーを護衛する4. 敵が近ければ、攻撃する。優先度は:

• プレイヤー• クリープ (NPC)

5. HP が減れば、基地に戻る6. 場所に引っかかる場合の対応

Page 26: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

NPC 対戦チュートリアルのBehaviour Tree 2/2

Sel

基地へ行く 回復

HP>10 Seq

タワーからの距離 <5

引っかかる場合の

対応

Sel

Seq

Sel

プレイヤーを攻

クリープを攻撃

クリープを付いて

いく

プレイヤーを攻

撃クリープ

を攻撃タワーを

護衛

タワーへ行く

Sel

Page 27: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Tree を可視化するツールも

作ってみました

Page 28: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

ツール• 可視化するツールがないと、デバッグが難しい• Unity Editor 上で動く• 選択されているオブジェクトが特別なコンポネ

ントを持っているかどうかを探知して、自動的に表示・非表示する

• 形: Tree• 色:ステータスを表現• デバッグ情報も表示• リアルタイム

Page 29: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

キャプチャした動画

Page 30: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

Behaviour Treeメリット・デメリット

Page 31: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

メリット• Behaviour Tree のルールによって、AIが複雑になっていても管理しやすい

• 全体的に可視化できる– デバッグは比較的に楽

• ノードがモジュラー– 再利用性は高い–同じノードを使いまわして、違うAIを作る

ことが楽。例:アグレッシブなAI

Page 32: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

欠点• すべてのノードに訪れる可能性があるので、

State Machine より CPU の負担がかかる可能性がある

• すべての行動がノードで表現されているので、簡単な行動を作りたくても、ノードを作る必要がある– 例: NPC の向きを固定にする

Page 33: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

欠点の対応• CPU の負担:– Behaviour Tree の Update を毎フレーム実行し

ない• ノードを必ず作る:– State Machine と Behaviour Tree の組み合わせ

S0 E1

S1

E2

E3A

Sel

A A

Page 34: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

まとめ

Page 35: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

まとめ• 作りたいAIが複雑であれば、 Behaviour Tree を使ったほうがよい。– 最初的には Behaviour Tree のフレームワークを開発するコスト

が発生しますが、長期的に見ると開発コストが下がるし、生産性もあがる• フレームワークの開発は1回だけで、使いまわすことができる。• デバッグが楽• 再利用性

– 複雑の定義:ステートの数がおよそ4つ以上。ボス戦に向いている

• AIが複雑でなければ、 State Machine でもよい– 再利用性を高めたければ、 State Machine と Behaviour Tree の組み合わせを作ることもできる

Page 36: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

おまけ• Tree の構造を表示するのは意外と少々難しかった

– Y座標は簡単– X座標は少々難しい

• ある行動を1つのノードにするか、何かに組み合わせで、同じ行動を表現するかを少々悩んだことがある。例:プレイヤーとタワーを攻撃する1. 同じ Action ノードにする2. 別々にする

• Behaviour Tree の作成はコードで手で書いた。それを作る・編集ツールがあれば、さらに生産性があがる。– ランタイムで編集して、その編集をすぐ反映できる

Page 37: Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)

以上ご清聴ありがとうございます。