BehaviorTree

1d1580fb0945b0ffadff18e28bead3c5?s=47 いも
January 09, 2018

 BehaviorTree

社内LT大会で発表したやつです

1d1580fb0945b0ffadff18e28bead3c5?s=128

いも

January 09, 2018
Tweet

Transcript

  1. Behavior Tree imo

  2. imo です https://adarapata.com/

  3. AI のおはなし

  4. みなさんはAI を作るときどう してますか?

  5. 僕は作ったことありません 一緒に勉強しましょう

  6. アクションゲー ムのキャラのAI を作り たい 動かない( 静止) 索敵範囲内に敵がいたら接近 攻撃範囲内に敵がいたら攻撃 接近中に相手が攻撃してきたら回避 静止中は一定確率で踊る

  7. ステー トマシンで書いてみる 5 つの行動を「 状態」 と考える それぞれの状態遷移先を定義する 実装は割と楽

  8. ステー トマシンのデメリット 状態が増えると遷移が爆発的に増える 遷移が増えると複雑性が増し、 管理しにくい 状態と遷移条件と紐づくため、 再利用性が低い

  9. そこでBehaviorTree

  10. BehaviorTree 振る舞いをツリー 状で管理する手法 状態ではなく振る舞いを定義する ステー トマシンより複雑な意思決定を行える 今のゲー ム業界AI はこれが多いらしい 発祥は「Halo2」

    とのこと
  11. どんなの? ↑ だとよくわからんのでUnity 上でBehaviorTree を扱 うアセットで見る

  12. 基本は左から深さ優先探索していく

  13. ノー ド Tree を構成する要素 以下のどれかのステー タスをもつ READY: 初期化 SUCCESS: 成功

    FAILURE: 失敗 RUNNING: 実行中 ステー タスを親ノー ドに返して評価する
  14. ノー ドの種類 基本的なやつは以下 Action Conditional Sequence Selector Decorator

  15. Action ノー ド 実際に実行する処理のノー ド 子を持たないリー フノー ド 今回だと攻撃とか踊るとかのロジック アクションに対しての成否を返す

  16. Conditional ノー ド 条件判定を行うノー ド 子を持たないリー フノー ド 今回だと敵が攻撃してきたか? などの部分

    条件判定の成否を返す
  17. Sequence ノー ド いわゆるAND ノー ド 必ず子を持つ 子を左から順番に実行する 子から成否をもらい、 否が返ってくると終了して

    親に返す 否が来ない限り、 子を全部実行する
  18. Selector ノー ド いわゆるOR ノー ド 必ず子を持つる 子を左から順番に実行する 子から成否をもらい、 成が返ってくると終了する

  19. Decorator ノー ド 今回使ってない Action の結果に装飾を行うノー ド Action は成功したけど強制的に失敗とか

  20. 例: 敵が攻撃範囲内にいた場合

  21. 例: 敵が索敵範囲内にいる、 且つ攻撃はしていない

  22. 例: 敵が攻撃範囲にも索敵範囲にもいない、 踊らない

  23. Behavior Tree のいいところ ステー トマシンより複雑な条件に対応できる 小さなノー ドの組み合わせで表現するため、 変更 しやすい ステー

    トマシンと共存可能 パズルみたいで楽しい( 個人の感想) 気をつけるところ 単純な挙動にもツリー の作成が必要 ステー トマシンよりはリソー スが必要
  24. 出稼ぎダンジョンの敵キャラの例

  25. 便利

  26. おわり