51.4K Views
May 12, 22
スライド概要
Unreal Fest 2016 大阪で登壇した際に使用したスライドです。
一部当日の内容に注釈を新たに加えました。
一通りの内容を読んでもらえると、UE4のAI機能ついてを俯瞰することができると思います。
Unreal Fest 2016 大阪 はじめてのAI~ 愛のあるAIを作ろう フリーランス ゲームクリエイター 中村 匡彦
自己紹介 名前 : 中村 匡彦 ネット上では主にalweiという名前で活動中。 Twitterでは『@aizen76』でやっています。 元々はゲームプログラマー。2年前から独立してフリーに。 関西圏を中心にUE4コミュニティの拡大させるために活動中。
自己紹介 著書 Unreal Engine 4 ブループリント 逆引きリファレンス 翔泳社様より絶賛発売中 技術ライターみたいなこともやります。 比較的いつでもお仕事募集中です。
今回のお題は『AI』
UE4のAI機能群 ブラック ボード ビヘイビ アツリー ナビゲー ション メッシュ AI Controller AI Components EQS この他にもまだあります
AIの概略図 ビヘイビアツリー & ブラックボード キャラクター AI Controller これらはそれぞれ 別物として機能
キャラクター UE4上では『Character』クラスのことを指します。 『Pawn』クラスでもOKですがここでは『Character』に。 AIとしては見た目やコリジョン部分を担当します。 アニメーションはスケルタルメッシュにお任せ。 基本的にロジックは実装しません。 ここにAIの仕組みを乗せていくことになります。
AI Controller AIの心臓部です。 AIに対する指示系統全般を担当。 『Character』に所有させることによって、AIとして機能。 ナビゲーションメッシュの機能もここに。 ビヘイビアツリーの起動もAI Controllerから行います。 全てのAI機能のまとめ役。
ビヘイビアツリー & ブラックボード 『ビヘイビアツリー』 AI自体の行動ロジックを決める仕組み。 ノードツリー形式にAIがどう思考するか可視化。 『ブラックボード』 AIの記憶領域(メモリー)。 AI内で各種情報を共有する際に利用されます。 この二つはお互い密接に関連性があります。
AIのセットアップ まずはそれぞれのアセットを新規作成。 AI Controllerやビヘイビアツリーを作成しておく。 詳しい手順は公式ドキュメントにあります。 『ビヘイビアツリーのクイックスタート ガイド』 https://docs.unrealengine.com/latest/JPN/Engine/AI/Behavior Trees/QuickStart/index.html
ナビゲーションメッシュ AIにレベル上のメッシュのどこが通過可能かを教える仕組み。 UE4では『Nav Mesh Bounds Volume』というアクターを 配置すると自動的に生成。 『P』キーを押すと緑色で可視化。 あとは『Move To』ノードなどを 使用するだけで利用可能。
ビヘイビアツリーの仕組み ルートノードから始まり、必ず左側から実行し、右側へ。 ひとつ実行が終わると親ノードに戻り、次の子ノードを辿る。 実行順序を変えることはできません。 ナビゲーションメッシュを 使用しなくてもビヘイビアツリーを 利用すること自体は可能です。
ビヘイビアツリーノード
ルート ビヘイビアツリーで最初に実行される親ノード。 何かをするわけではないですが、 ビヘイビアツリーを実行するために なくてはならないノード。 すべてはここから。
コンポジット 各ノード間を繋ぎ合わせるために利用可能な唯一のノード。 最も重要とされるのが 『Sequence』と『Selector』 のふたつのノード。 このノードによりフローの 分岐が可能となる。
タスク AI自体が実行する作業をまとめたノード(紫色)。 主にAIはタスクを自作して、 それらを繋ぎ合わせていくことで 制御を行うことになります。 作業が完了、もしくは失敗と判断 した場合、次のタスクへ移行。
デコレーター 各ノードにくっ付けて利用可能となるノード(青色)。 条件を設定することが可能で、 必要に応じて子ノードの実行を 強制的に停止したり、 キャンセルすることができる。
サービス デコレーターと同じくノードにくっ付けます(緑色)。 タスクとは別作業を並列に何か してほしいという場合に利用。 AIの状況を監視したい等のケース によく利用されます。 標準ノードはほとんどない。
まずはコンポジットとタスク! 何はともあれ、まずはコンポジットとタスクを理解しましょう! このふたつのノードさえ理解していれば、 とりあえずなんとなくでもビヘイビアツリーは使えます。 不便だなと感じてきたらデコレーターとサービスも併用し、 『あ、こりゃ便利や!』と思ったらそれで十分です。
フロー制御(Sequence) Sequenceノードを使うとタスクを左から順番に実行します。 ひとつでも失敗が発生すると 実行を停止して親ノードに 処理を戻します。 全てのタスクが成功を返すと Sequenceも成功を返します。
フロー制御(Selector) Selectorも左から順にタスクを実行しますが判定が違います。 こちらはひとつでも成功 すると親ノードに処理を 戻してしまいます。 全てのタスクが失敗すると、 Selectorも失敗を返します。
タスクの成功・失敗の判断 分岐に利用するタスクの成功と失敗の判断は、 『BTTask_Blueprint_Base』クラスにある『Finish Execute』 というノードを使用して判断します。 引数ピン『Success』により、 成功・失敗を判断し、タスク実行を 終了して次のタスクへ移行します。
フロー制御まとめ 『Sequence』 ・子ノード全てが成功を返す→Sequenceも成功を返す ・子ノードいずれかが失敗を返す→Sequenceも失敗を返す 『Selector』 ・子ノード全てが失敗を返す→Selectorも失敗を返す ・子ノードいずれかが成功を返す→Selectorも成功を返す
変数共有の仕組み(ブラックボード) 各ブループリント内でタスク、サービスなどで変数を 利用する場合には『ブラックボード』を使用します。
変数共有の仕組み(ブラックボード) 『Set~』『Get~』を使って『Key』に指定した変数を作成し、 そこに値を代入、取得すればAI内での変数共有が可能に。
AI作成の実践
AI Components
AI Components コンポーネントとしてAI用のものが用意されています。 ・Pawn Sensingコンポーネント ・Pawn Noise Emitterコンポーネント ・AI Perceptionコンポーネント ・AI Perception Stimuli Sourceコンポーネント
Pawn Sensingコンポーネント AIにSense(感覚)を与える ことができるコンポーネント。 『視覚』と『聴覚』を感じる ことが可能となり、 範囲内にいるアクターを 自動的に検知できるように。
Pawn Sensingコンポーネント 『OnSeePawn』&『OnHearNoise』イベントで通知。
Pawn Noise Emitterコンポーネント 『Make Noise』で音を実際に発生させる。 『OnHearNoise』イベントでAIが音を検知可能。
AI Perceptionコンポーネント Pawn SensingコンポーネントはSense(感覚)で、 AI PerceptionコンポーネントはPerception(知覚)を検知。 知覚はより複雑な感覚検知が可能となる。 AI Perception Stimuli Sourceコンポーネントを使うと 登録するSense Classを指定することができる。
AI Perceptionコンポーネント オリジナルの感覚クラスが作成可能で汎用性重視。 デフォルトで用意されている『AI Sight Config』クラスでは 敵、味方、それ以外を見分けることが可能。 更に視界に入ったアクターだけではなく見失った場合でも そのアクターを通知することができる。
AI Perceptionコンポーネント Pawn Sensingコンポーネントと比べて、直感的ではない。 使い方もドキュメントは存在せず、ソースコードを読んで 理解できる人でないと 使いこなすのは難しい。 Epic Gamesが拡張前提の設計で 作っているようなので今後に期待大。
Environment Query System
EQS(環境クエリーシステム) レベル上から情報を収集し、必要な情報をAIへと 回答(クエリー)を与えてくれるシステム。 例えば、広いマップ上のどこへ移動するのが最適か? 敵に囲まれた時、どこへ逃げるのが最適か? なるべく弱ってて、なるべく近くにいるのはどの敵か? 簡単に情報を収集してスコア形式で受け取ることが可能。
EQS(環境クエリーシステム) プレイヤーから逃げるのに、最適な位置を探しだすEQSの例。 距離やトレース情報、 内積による角度計算を行い、 その位置へは到達可能かを EQSが判断してスコア化する。 スコアが最も高いものを利用する。
EQSの視覚化 『EQSTestingPawn』を作成して配置するとスコアを可視化可能。
EQSの要素(ジェネレータ) アイテムと呼ばれる、位置やアクターを生成するモノ。 ジェネレータが生成した、アイテムをスコア付けして、 最も高いものをビヘイビアツリー上で受けとることが可能。 EQSにおいて最も重要な部分。
EQSの要素(テスト) 実際にスコアをつけるためのテスト基準。 このテストで最も良いスコアをだしたアイテムが 結果としてビヘイビアツリーへと返る。 距離や内積やトレースなどの標準のテストがあり。 テスト次第でAIが賢くなったりバカっぽくなったりする。
EQSの要素(コンテキスト) ジェネレータやテストで基準となる何か。 例えばプレイヤーを基準に動きたいという場合には、 プレイヤーをコンテキストとしてAIに与えて、 プレイヤー位置などをEQSの判断材料とすることが可能。 コンテキストはアクターとして取得できれば何でもOKです。
ゲームプレイデバッガー
ゲームプレイデバッガー 実行中に『’』キーを押すとAIのデバッグ機能が起動。 ※英語キーボードのみ。 日本語キーボードは コンソールコマンド 『EnableGDT』を プレイ中に入力すると ゲームプレイデバッガー が起動します。
ゲームプレイデバッガー ビヘイビアツリーやEQSのスコアやナビゲーション情報など、 あらゆるものを視覚化。 リアルタイムに確認可能なので、 実行しながらAIの動作検証が 可能となっています。 一部エディタの環境設定が必要。
まとめ UE4のAI機能を軽くみてきました。 実はまだ他にもAIの機能があります。(群集AIとか) UE4のAIは今もまだ発展途上という感じですが、 一部は既にかなり実用的なものばかりです。 ぜひこれらのAI機能を使って可愛いAIを作ってあげてください!
ご静聴いただき、 ありがとうございました!