Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
幻塔戦記グリフォンでの
Behaviour Treeの試み
2014.01.29
Sindharta Tanuwijaya
(シンダルタ タヌイジャヤ)
Behaviour Treeとは
• AIのアルゴリズムの1つ
– State Machineと目的が似ています
• 目的:ゲーム内のオブジェクトが考えて
行動するようにする
• NPC対戦チュートリアルに使ってみた
State Machine
ステート・マシン
State Machineの振り返り 1/2
• オブジェクトの行動を下記のもので表現
する
– State
– Stateの遷移(Event)で表現する
S0
E1
S2S1 S3
E2
E3 E4
E5
S: State
E: Event
State Machineの振り返り 2/2
• 例:爆弾
周囲を
探知
爆発
距離< x
消える
アニメーションが
終われば
時間< y
NPC対戦チュートリアルに
State Machineを使える?
NPC対戦チュートリアルに
State Machineを使える?
• NPC対戦の仕様:
1. クリープ (NPC)が前進したときは慎重についていく
2. AIは保守的。あまり深く敵を追わない
3. タワーを護衛する
4. 敵が近ければ、攻撃す...
State Machineの欠点 1/2
• Stateの数が少なければ問題ないが、State
の数が増えれば、管理しないといけない
遷移は膨大に増える。大雑把に:
?
S: 3
E: 3
S: 4
E: 6
S: 5
E: 10
S: 6
E...
State Machineの欠点 2/2
• Stateとその遷移が1つのAIの構造に
なっているので、再利用性が低い
– 例:攻撃する行動は別のAIで実行されてい
ましたが、簡単に使いまわすことができない
S0
E1
S2S1
E2
E3
S...
State Machineの問題のまとめ
• 問題点:
1. Stateの数が増えれば、管理しないといけな
い遷移は膨大に増える
• バグが出やすい
• デバッグは難しい
2. 再利用性が低い
• 違うやり方で、NPC対戦のチュートリアル
をや...
Behaviour Tree
Behaviour Tree: 入門
• 構造:Tree
• Treeのノードはステータスを持ってい
る:
– READY: 初期値
– SUCCESS: ノードの実行が成功した
– FAILURE:ノードの実行が失敗した
– RUNNING:...
Action ノード
• 一番シンプル:実行するのみ
• TreeのLeafだけ。子は持てない
• 例:一番近い敵への攻撃
A
Decorator ノード
• ある条件のチェックを行う:
– 通ったら子を実行して、子が返すステータスを返す
– 通らなかったら、Failureを返す
• 子は1つだけ。
• 例:HP<10であれば、一番近い敵を攻撃する
– D:HP<10
...
Selector ノード
• 成功する子が見つかるまで、子を1つ1つ実行する。
– 見つかったら、処理を止めて、Successを返す。
– 見つからなかったら、Failureを返す
• 例:
– 一番近い敵を攻撃する
– 敵がいなかったら、クリ...
Sequence ノード
• 順番に子を実行するノード
– 子が成功したら、すぐRunningを返す。次のフレームの
Updateで次の子を実行する
– 子が失敗したら、すぐFailureを返す
– すべてのノードを実行し終わったら、Succe...
TreeのUpdateのルール
• 毎フレームではなくてもよいが、定期的
にUpdate
• RUNNINGじゃないノードのステータスを
READYにしてから、RootからUpdateする
– 再帰的
例
Behaviour Treeの例
• HPが10より大きけ
れば、一番近い敵
を攻撃する。最大
距離:5m
• 敵が見つからな
かったら、一番前
のタワーに移動し
て、待機する
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
...
HP最大で、敵も近くにいる場合
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
Ready
Running
Succ...
HP最大で、敵も近くにいない場
合
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
Ready
Running
Su...
まだタワーついていなかったら、そのまま
行く
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
Ready
Running
Success
Failure
タワーについたら、待機
5m以内
の敵を
攻撃
Sel
一番前
のタ
ワーに
行く
待機
HP>
10
Seq
Ready
Running
Success
Failure
全体の流れ
• Updateのルール
– 毎フレームではなくてもよいが、定期的
Update
– RUNNINGじゃないノードのステータスを
READYにしてから、RootからUpdateする
• 再帰的
• ずっと繰り返す
NPC対戦チュートリアルの
Behaviour Tree 1/2
• NPC対戦の仕様:
1. クリープ (NPC)が前進したときは慎重について
いく
2. AIは保守的。あまり深く敵を追わない
3. タワーを護衛する
4. 敵が近ければ、攻撃...
NPC対戦チュートリアルの
Behaviour Tree 2/2
Sel
基地へ
行く
回復
HP>10 Seq
タワーから
の距離<5
引っかか
る場合の
対応
Sel
Seq
Sel
プレイ
ヤーを攻
撃
クリー
プを攻
撃
クリープ
を付...
Behaviour Treeを
可視化するツールも
作ってみました
ツール
• 可視化するツールがないと、デバッグが難し
い
• Unity Editor上で動く
• 選択されているオブジェクトが特別なコンポ
ネントを持っているかどうかを探知して、自
動的に表示・非表示する
• 形:Tree
• 色:ステータス...
Behaviour Tree
メリット・デメリット
メリット
• Behaviour Treeのルールによって、AIが
複雑になっていても管理しやすい
• 全体的に可視化できる
– デバッグは比較的に楽
• ノードがモジュラー
– 再利用性は高い
– 同じノードを使いまわして、違うAIを作る
こ...
欠点
• すべてのノードに訪れる可能性があるの
で、State MachineよりCPUの負担がかかる
可能性がある
• すべての行動がノードで表現されている
ので、簡単な行動を作りたくても、ノー
ドを作る必要がある
– 例:NPCの向きを固定...
欠点の対応
• CPUの負担:
– Behaviour TreeのUpdateを毎フレーム実行しな
い
• ノードを必ず作る:
– State MachineとBehaviour Treeの組み合わせ
S0 E1
S1
E2
E3
A
Sel
...
まとめ
まとめ
• 作りたいAIが複雑であれば、Behaviour Treeを
使ったほうがよい。
– 最初的にはBehaviour Treeのフレームワークを開発す
るコストが発生しますが、長期的に見ると開発コス
トが下がるし、生産性もあがる
• フ...
おまけ
• Treeの構造を表示するのは意外と少々難しかった
– Y座標は簡単
– X座標は少々難しい
• ある行動を1つのノードにするか、何かに組み合
わせで、同じ行動を表現するかを少々悩んだこと
がある。例:プレイヤーとタワーを攻撃する
1...
以上
ご清聴ありがとうございます。
 Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Upcoming SlideShare
Loading in …5
×

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

46,419 views

Published on

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

Published in: Technology

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

  1. 1. 幻塔戦記グリフォンでの Behaviour Treeの試み 2014.01.29 Sindharta Tanuwijaya (シンダルタ タヌイジャヤ)
  2. 2. Behaviour Treeとは • AIのアルゴリズムの1つ – State Machineと目的が似ています • 目的:ゲーム内のオブジェクトが考えて 行動するようにする • NPC対戦チュートリアルに使ってみた
  3. 3. State Machine ステート・マシン
  4. 4. State Machineの振り返り 1/2 • オブジェクトの行動を下記のもので表現 する – State – Stateの遷移(Event)で表現する S0 E1 S2S1 S3 E2 E3 E4 E5 S: State E: Event
  5. 5. State Machineの振り返り 2/2 • 例:爆弾 周囲を 探知 爆発 距離< x 消える アニメーションが 終われば 時間< y
  6. 6. NPC対戦チュートリアルに State Machineを使える?
  7. 7. NPC対戦チュートリアルに State Machineを使える? • NPC対戦の仕様: 1. クリープ (NPC)が前進したときは慎重についていく 2. AIは保守的。あまり深く敵を追わない 3. タワーを護衛する 4. 敵が近ければ、攻撃する。優先度は: • プレイヤー • クリープ (NPC) 5. HPが減れば、基地に戻る 6. 場所に引っかかる場合の対応 • Stateの数:少なくとも6 • 遷移の数:正確には不明だが、多い • 最初一部をState Machineで実装しが、State Machineの 欠点をよく考えさせられた
  8. 8. State Machineの欠点 1/2 • Stateの数が少なければ問題ないが、State の数が増えれば、管理しないといけない 遷移は膨大に増える。大雑把に: ? S: 3 E: 3 S: 4 E: 6 S: 5 E: 10 S: 6 E: 15 S: 7 E: 21
  9. 9. State Machineの欠点 2/2 • Stateとその遷移が1つのAIの構造に なっているので、再利用性が低い – 例:攻撃する行動は別のAIで実行されてい ましたが、簡単に使いまわすことができない S0 E1 S2S1 E2 E3 S0 Ex SySx Ey Ez S: State E: Event
  10. 10. State Machineの問題のまとめ • 問題点: 1. Stateの数が増えれば、管理しないといけな い遷移は膨大に増える • バグが出やすい • デバッグは難しい 2. 再利用性が低い • 違うやり方で、NPC対戦のチュートリアル をやろうと考えた – Behaviour Tree
  11. 11. Behaviour Tree
  12. 12. Behaviour Tree: 入門 • 構造:Tree • Treeのノードはステータスを持ってい る: – READY: 初期値 – SUCCESS: ノードの実行が成功した – FAILURE:ノードの実行が失敗した – RUNNING:ノードの実行がまだ終わっ ていない • 代表的なBehaviour Treeのノードの種 類: – Action ノード – Selector ノード – Sequence ノード – Decorator ノード
  13. 13. Action ノード • 一番シンプル:実行するのみ • TreeのLeafだけ。子は持てない • 例:一番近い敵への攻撃 A
  14. 14. Decorator ノード • ある条件のチェックを行う: – 通ったら子を実行して、子が返すステータスを返す – 通らなかったら、Failureを返す • 子は1つだけ。 • 例:HP<10であれば、一番近い敵を攻撃する – D:HP<10 – A:一番近い敵を攻撃する A D
  15. 15. Selector ノード • 成功する子が見つかるまで、子を1つ1つ実行する。 – 見つかったら、処理を止めて、Successを返す。 – 見つからなかったら、Failureを返す • 例: – 一番近い敵を攻撃する – 敵がいなかったら、クリープを付いていく – クリープがいなかったら、待機する A Sel A A
  16. 16. Sequence ノード • 順番に子を実行するノード – 子が成功したら、すぐRunningを返す。次のフレームの Updateで次の子を実行する – 子が失敗したら、すぐFailureを返す – すべてのノードを実行し終わったら、Successを返す • 例:ある位置に移動して、着いたらしばらく待機する A Seq A Running A Seq A フレーム1 フレーム2 A A Ready
  17. 17. TreeのUpdateのルール • 毎フレームではなくてもよいが、定期的 にUpdate • RUNNINGじゃないノードのステータスを READYにしてから、RootからUpdateする – 再帰的
  18. 18.
  19. 19. Behaviour Treeの例 • HPが10より大きけ れば、一番近い敵 を攻撃する。最大 距離:5m • 敵が見つからな かったら、一番前 のタワーに移動し て、待機する 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq Ready
  20. 20. HP最大で、敵も近くにいる場合 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq Ready Running Success Failure
  21. 21. HP最大で、敵も近くにいない場 合 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq Ready Running Success Failure
  22. 22. まだタワーついていなかったら、そのまま 行く 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq Ready Running Success Failure
  23. 23. タワーについたら、待機 5m以内 の敵を 攻撃 Sel 一番前 のタ ワーに 行く 待機 HP> 10 Seq Ready Running Success Failure
  24. 24. 全体の流れ • Updateのルール – 毎フレームではなくてもよいが、定期的 Update – RUNNINGじゃないノードのステータスを READYにしてから、RootからUpdateする • 再帰的 • ずっと繰り返す
  25. 25. NPC対戦チュートリアルの Behaviour Tree 1/2 • NPC対戦の仕様: 1. クリープ (NPC)が前進したときは慎重について いく 2. AIは保守的。あまり深く敵を追わない 3. タワーを護衛する 4. 敵が近ければ、攻撃する。優先度は: • プレイヤー • クリープ (NPC) 5. HPが減れば、基地に戻る 6. 場所に引っかかる場合の対応
  26. 26. NPC対戦チュートリアルの Behaviour Tree 2/2 Sel 基地へ 行く 回復 HP>10 Seq タワーから の距離<5 引っかか る場合の 対応 Sel Seq Sel プレイ ヤーを攻 撃 クリー プを攻 撃 クリープ を付いて いく プレイ ヤーを攻 撃 クリー プを攻 撃 タワーを 護衛 タワー へ行く Sel
  27. 27. Behaviour Treeを 可視化するツールも 作ってみました
  28. 28. ツール • 可視化するツールがないと、デバッグが難し い • Unity Editor上で動く • 選択されているオブジェクトが特別なコンポ ネントを持っているかどうかを探知して、自 動的に表示・非表示する • 形:Tree • 色:ステータスを表現 • デバッグ情報も表示 • リアルタイム
  29. 29. Behaviour Tree メリット・デメリット
  30. 30. メリット • Behaviour Treeのルールによって、AIが 複雑になっていても管理しやすい • 全体的に可視化できる – デバッグは比較的に楽 • ノードがモジュラー – 再利用性は高い – 同じノードを使いまわして、違うAIを作る ことが楽。例:アグレッシブなAI
  31. 31. 欠点 • すべてのノードに訪れる可能性があるの で、State MachineよりCPUの負担がかかる 可能性がある • すべての行動がノードで表現されている ので、簡単な行動を作りたくても、ノー ドを作る必要がある – 例:NPCの向きを固定にする
  32. 32. 欠点の対応 • CPUの負担: – Behaviour TreeのUpdateを毎フレーム実行しな い • ノードを必ず作る: – State MachineとBehaviour Treeの組み合わせ S0 E1 S1 E2 E3 A Sel A A
  33. 33. まとめ
  34. 34. まとめ • 作りたいAIが複雑であれば、Behaviour Treeを 使ったほうがよい。 – 最初的にはBehaviour Treeのフレームワークを開発す るコストが発生しますが、長期的に見ると開発コス トが下がるし、生産性もあがる • フレームワークの開発は1回だけで、使いまわすことができ る。 • デバッグが楽 • 再利用性 – 複雑の定義:ステートの数がおよそ4つ以上。ボス 戦に向いている • AIが複雑でなければ、State Machineでもよい – 再利用性を高めたければ、State MachineとBehaviour Treeの組み合わせを作ることもできる
  35. 35. おまけ • Treeの構造を表示するのは意外と少々難しかった – Y座標は簡単 – X座標は少々難しい • ある行動を1つのノードにするか、何かに組み合 わせで、同じ行動を表現するかを少々悩んだこと がある。例:プレイヤーとタワーを攻撃する 1. 同じActionノードにする 2. 別々にする • Behaviour Treeの作成はコードで手で書いた。それ を作る・編集ツールがあれば、さらに生産性があ がる。 – ランタイムで編集して、その編集をすぐ反映できる
  36. 36. 以上 ご清聴ありがとうございます。

×