SlideShare a Scribd company logo
Behavior TreeでAIを作る
2016/12/10
@toRisouP
自己紹介
• 名前 とりすーぷ(@toRisouP)
• 趣味でC#/Unity開発をやってます
アドベントカレンダー書きました
• Unity2 Advent Calendar 4日目
今作ってるゲーム
• ハクレイフリーマーケット
– 東方2次創作同人ゲーム
– PC向け、コミケ等の同人即売会で配布
– 最大6人対戦、オンライン対戦対応
– まだ開発中です
ルール
• フィールド上のアイテムを陣地に運ぶと点数になる
– アイテムには金額がある
– 最終的に合計金額が大きいチームの勝ち
こんな要望が
• 6人対戦ゲームなのに、6人も人が集まらない
• ぼっちでも遊びたい
これらの要望に答えるためにAIを実装することにしました
今回の内容
Behavior Treeを使って
AIを作ってみた話をします
Behavior Tree
Behavior Treeとは
• AIアルゴリズムを作る手法の1つ
• 行動(Task)をTree構造で管理し、状態に応じて
深さ優先でTaskを実行する
• ステートマシンと比較して状態の管理がしやすい
Behavior Treeを実現するアセット
• Behavior Designer を今回は使いました
(Behavior Designerを使った)
Behavior Treeのしくみ解説
ノード
• Treeを構成する各要素のこと(Taskともいう)
• 「待機中」「成功」「実行中」「失敗」の状態がある
• 基本的にこの成否状態を利用して状態遷移を行う
基本単位のノード
Actionノード
• 何か処理を実行する
– 移動する、攻撃する、ジャンプするなど
– 実行結果がそのまま成否になる
Conditionalノード
• 条件判定を行う
– プレイヤが特定の座標にいるか、敵が近くにいるかなど
– 条件判定の結果が成否になる
組み合わせるノード
Sequenceノード
• ANDに相当するノード
• 子を左から順番に実行
– どれか一個でも途中で失敗したらそこで終了
– 全部実行できたら成功判定を返す
敵が近くにいるか? 攻撃する
「敵が近くにいた場合に攻撃する」
Sequence
Selectorノード
• ORに相当するノード
• 子を左から順番に実行
– どれか一個でも成功したらそこで終了して成功を返す
– 全部実行して失敗したら失敗を返す
体力が残り少ない 残り時間が少ない
?
「体力が少ない」または「残り時間が少ない」か
Selector
基本はこの4つのノード
• ActionとConditionalを並べて一連の動作を作る
– 動作をSequenceやSelectorで制御
• もうちょっと複雑な挙動をするノードもある
– 優先順位を設定可能なやつ
– ランダムに実行するやつ
– ずっと繰り返すやつ
簡単なAIの例
例
• 体力が少ないと拠点に移動
• そうでないなら敵に近づいて攻撃
?
Repeter
Selector
Sequence Sequence
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
※体力が少ないとき
?
※体力が少ないとき
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
1.深さ優先で条件判定開始
実行中
実行中
実行中
実行中
?
※体力が少ないとき
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
実行中
実行中
成功
2.条件判定に成功して
移動処理に遷移
実行中
実行中
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
※体力が多い時
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
1.深さ優先で条件判定開始
実行中
実行中
実行中
実行中
※体力が多い時
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
2.判定に失敗し、「失敗」
ステータスが返される
実行中
失敗
実行中
※体力が多い時
失敗
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
3.Selectorが次のTreeの
ノードを実行する
実行中
失敗
実行中
※体力が多い時
失敗
実行中
実行中
?
体力が少ない? 拠点に移動
近くの敵を取得
近くまで移動
攻撃
4.Sequenceが子を
順番に実行
実行中
失敗
実行中
※体力が多い時
失敗
実行中
実行中成功 成功
Behavior Treeはかんたん
• GUIで簡単にそこそこ複雑な動作が作れる
• ステートマシンと比べて状態遷移が非常に楽
• ActionとConditionalの組み合わせを変えれば挙動を
すぐに変更できる
– 再利用性も高い
実際にAIを作ってみる
専用のActionとConditional
を用意する
作ったAction
• 対象の近くまで移動する(NavMesh利用)
• 対象の方に振り向く
• 掴む/投げる
• 自陣へ運ぶ/敵陣へ運ぶ
• 攻撃する
• フィールド上のアイテムを1個選ぶ
– A:近さ優先、金額優先、軽いもの優先
– B:敵陣から、どこの陣地にも属してないフリーのもの
– A x B = 6種類 + 完全ランダム の計7種類
作ったConditional
• 優勢である
• 劣勢である
• 敵が近くにいる
• 何か持っている
– 何でも
– 敵プレイヤ
– 金額がプラスのアイテム
– 金額がマイナスをアイテム
– 爆弾
これらを組み合わせて
AIを作る
最小構成のAI
最小構成のAI
自陣へ移動
自陣に向きを合わせる
投げる
アイテムをランダムに
1つ選択
近くまで移動
向きを合わせる
掴む何か持ってる?
実際の動き
たったこれだけで動く
• これだけでもそれっぽさがある
• これをベースに拡張して賢くしていく
いろいろ追加
挙動を追加
• 優勢時・劣勢時で選ぶアイテムを変える
– 負けてると敵陣からアイテムを盗むようにする
• アイテムの価値を判断して運ぶ
– 価値がプラスのものは自陣へ、マイナスのものは敵陣へ
• 敵が近くに居たら攻撃する
• アイテムを加工する(特定キャラのユニークスキル)
• 移動中に引っかかったら諦める
さらにキャラごとの差異を出す
• キャラの特徴にあった行動を優先させる
– がめつい性格の設定のキャラは金額が高いアイテムを優先
– 足が早い設定のキャラは軽いアイテムを優先
• パラメータ調整で攻撃の頻度や強さを変更
– アグレッシブさ(攻撃する確率)
– 連続攻撃のクールタイム
– 敵を検知する範囲
最終系
実際の動き
• 全員AIの戦い
出来上がったAIの感想
• 最後までどっちが勝つかわからないいい勝負をする
– 攻めと守りのバランスが良い感じなのかな?
– 良い感じのできでは?
• 人間が遊んだときより全体的に点数が高くね?
– 人間は妨害に熱心になって全然アイテムを運ばない
– AIはひたすらアイテムを運ぶから点数が高くなる
– 人間がいるチームの方が不利なのでは?
まとめ
• BehaviorTreeを使うと簡単にAIがつくれる
– 実装にかかった時間は休日3日分くらい
– 7割くらいがTaskの実装、3割くらいがTreeの構築
• 調整がまだまだ必要
– 歩いてる途中にひっかかった時の復帰処理がまだ甘い
– もっとアグレッシブに攻撃させたい
• AIつくるの楽しいしかわいい
– 蟻が必死にお菓子運んでるみたいでかわいい
みんなもAIつくろう!
以上
• ありがとうございました
• @toRisouP

More Related Content

PPTX
『ゲームAI技術入門』講義用素材
Youichiro Miyake
 
PDF
ゲームAI入門(前半)
Youichiro Miyake
 
PDF
オンラインゲームの仕組みと工夫
Yuta Imai
 
PDF
Unity開発で使える設計の話+Zenjectの紹介
torisoup
 
PDF
マルチコアを用いた画像処理
Norishige Fukushima
 
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
PDF
KiCadで雑に基板を作る チュートリアル
裕士 常田
 
PDF
ChatGPTは思ったほど賢くない
Carnot Inc.
 
『ゲームAI技術入門』講義用素材
Youichiro Miyake
 
ゲームAI入門(前半)
Youichiro Miyake
 
オンラインゲームの仕組みと工夫
Yuta Imai
 
Unity開発で使える設計の話+Zenjectの紹介
torisoup
 
マルチコアを用いた画像処理
Norishige Fukushima
 
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
KiCadで雑に基板を作る チュートリアル
裕士 常田
 
ChatGPTは思ったほど賢くない
Carnot Inc.
 

What's hot (20)

PPTX
UniRxでMV(R)Pパターン をやってみた
torisoup
 
PDF
プログラムを高速化する話
京大 マイコンクラブ
 
PDF
UniTask入門
torisoup
 
PDF
Unityでオニオンアーキテクチャ
torisoup
 
PDF
インタフェース完全に理解した
torisoup
 
PDF
ゲームAI入門(後半)
Youichiro Miyake
 
PDF
Introduction to YOLO detection model
WEBFARMER. ltd.
 
PDF
Cinemachineで見下ろし視点のカメラを作る
Unity Technologies Japan K.K.
 
PDF
画像認識の初歩、SIFT,SURF特徴量
takaya imai
 
PDF
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
エピック・ゲームズ・ジャパン Epic Games Japan
 
PDF
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
PDF
Sift特徴量について
la_flance
 
PDF
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
 
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
 
PDF
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII
 
PDF
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
Toru Tamaki
 
PDF
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
Unity Technologies Japan K.K.
 
PDF
TLS, HTTP/2演習
shigeki_ohtsu
 
UniRxでMV(R)Pパターン をやってみた
torisoup
 
プログラムを高速化する話
京大 マイコンクラブ
 
UniTask入門
torisoup
 
Unityでオニオンアーキテクチャ
torisoup
 
インタフェース完全に理解した
torisoup
 
ゲームAI入門(後半)
Youichiro Miyake
 
Introduction to YOLO detection model
WEBFARMER. ltd.
 
Cinemachineで見下ろし視点のカメラを作る
Unity Technologies Japan K.K.
 
画像認識の初歩、SIFT,SURF特徴量
takaya imai
 
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
エピック・ゲームズ・ジャパン Epic Games Japan
 
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
Sift特徴量について
la_flance
 
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
 
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII
 
3次元レジストレーションの基礎とOpen3Dを用いた3次元点群処理
Toru Tamaki
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
Unity Technologies Japan K.K.
 
TLS, HTTP/2演習
shigeki_ohtsu
 
Ad

More from torisoup (19)

PDF
Doozy UI 使おうぜ! #unity_lt
torisoup
 
PDF
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
 
PDF
MagicOnion入門
torisoup
 
PDF
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
torisoup
 
PDF
ARでVRアバターを表示するシステムを構築しよう
torisoup
 
PDF
Observableで非同期処理
torisoup
 
PDF
ObserverパターンからはじめるUniRx
torisoup
 
PDF
Photon Cloud ことはじめ
torisoup
 
PDF
アバター生放送支援アプリ「アバれぽ」
torisoup
 
PDF
コールバックと戦う話
torisoup
 
PDF
UniRx完全に理解した
torisoup
 
PDF
UnityとNCMBでユーザ管理を実装してみた話
torisoup
 
PDF
Task vs Observable
torisoup
 
PDF
Unityでオンラインゲーム作った話
torisoup
 
PDF
UniRxでPUNを使いやすくする
torisoup
 
PPTX
はじめてのUniRx
torisoup
 
PPTX
未来のプログラミング技術をUnityで -UniRx-
torisoup
 
PPTX
みくみくまうすについて&Unity で使えるコーディングノウハウ
torisoup
 
PDF
Unity講習会(初級)
torisoup
 
Doozy UI 使おうぜ! #unity_lt
torisoup
 
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
 
MagicOnion入門
torisoup
 
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
torisoup
 
ARでVRアバターを表示するシステムを構築しよう
torisoup
 
Observableで非同期処理
torisoup
 
ObserverパターンからはじめるUniRx
torisoup
 
Photon Cloud ことはじめ
torisoup
 
アバター生放送支援アプリ「アバれぽ」
torisoup
 
コールバックと戦う話
torisoup
 
UniRx完全に理解した
torisoup
 
UnityとNCMBでユーザ管理を実装してみた話
torisoup
 
Task vs Observable
torisoup
 
Unityでオンラインゲーム作った話
torisoup
 
UniRxでPUNを使いやすくする
torisoup
 
はじめてのUniRx
torisoup
 
未来のプログラミング技術をUnityで -UniRx-
torisoup
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
torisoup
 
Unity講習会(初級)
torisoup
 
Ad

Recently uploaded (10)

PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 

【Unity】 Behavior TreeでAIを作る