はじめてのAI~ 愛のあるAIを作ろう

Preview:

Citation preview

フリーランス ゲームクリエイター中村 匡彦

はじめての AI ~愛のある AI を作ろう

Unreal Fest 2016 大阪

自己紹介

名前 : 中村 匡彦

ネット上では主に alwei という名前で活動中。

Twitter では『 @aizen76 』でやっています。

元々はゲームプログラマー。 2 年前から独立してフリーに。

関西圏を中心に UE4 コミュニティの拡大させるために活動中。

自己紹介

著書

Unreal Engine 4ブループリント逆引きリファレンス

翔泳社様より絶賛発売中

技術ライターみたいなこともやります。比較的いつでもお仕事募集中です。

今回のお題は『 AI 』

UE4 の AI 機能群

ビヘイビアツリーブラックボード

AI Controll

er

ナビゲーションメッシュ

EQSAI

Components この他にもまだあります

AI の概略図

AI Controlle

r

ビヘイビアツリー&ブラックボード

キャラクター これらはそれぞれ別物として機能

キャラクター

UE4 上では『 Character 』クラスのことを指します。

『 Pawn 』クラスでも OK ですがここでは『 Character 』に。

AI としては見た目やコリジョン部分を担当します。

アニメーションはスケルタルメッシュにお任せ。

基本的にロジックは実装しません。

ここに AI の仕組みを乗せていくことになります。

AI ControllerAI の心臓部です。

AI に対する指示系統全般を担当。

『 Character 』に所有させることによって、 AI として機能。

ナビゲーションメッシュの機能もここに。

ビヘイビアツリーの起動も AI Controller から行います。

全ての AI 機能のまとめ役。

ビヘイビアツリー & ブラックボード

『ビヘイビアツリー』

AI 自体の行動ロジックを決める仕組み。

ノードツリー形式に AI がどう思考するか可視化。

『ブラックボード』

AI の記憶領域(メモリー)。

AI 内で各種情報を共有する際に利用されます。

この二つはお互い密接に関連性があります。

AI のセットアップ

まずはそれぞれのアセットを新規作成。

AI Controller やビヘイビアツリーを作成しておく。

詳しい手順は公式ドキュメントにあります。

『ビヘイビアツリーのクイックスタート ガイド』

https://docs.unrealengine.com/latest/JPN/Engine/AI/BehaviorTrees/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 において最も重要な部分。

実際にスコアをつけるためのテスト基準。

このテストで最も良いスコアをだしたアイテムが

結果としてビヘイビアツリーへと返る。

距離や内積やトレースなどの標準のテストがあり。

テスト次第で AI が賢くなったりバカっぽくなったりする。

EQS の要素(テスト)

EQS の要素(コンテキスト)

ジェネレータやテストで基準となる何か。

例えばプレイヤーを基準に動きたいという場合には、

プレイヤーをコンテキストとして AI に与えて、

プレイヤー位置などを EQS の判断材料とすることが可能。

コンテキストはアクターとして取得できれば何でも OK です。

ゲームプレイデバッガー

ゲームプレイデバッガー

実行中に『’』キーを押すと AI のデバッグ機能が起動。

※英語キーボードのみ。日本語キーボードはコンソールコマンド『 EnableGDT 』をプレイ中に入力するとゲームプレイデバッガーが起動します。

ゲームプレイデバッガー

ビヘイビアツリーや EQS のスコアやナビゲーション情報など、

あらゆるものを視覚化。

リアルタイムに確認可能なので、

実行しながら AI の動作検証が

可能となっています。

一部エディタの環境設定が必要。

まとめ

UE4 の AI 機能を軽くみてきました。

実はまだ他にも AI の機能があります。(群集 AI とか)

UE4 の AI は今もまだ発展途上という感じですが、

一部は既にかなり実用的なものばかりです。

ぜひこれらの AI 機能を使って可愛い AI を作ってあげてください!

ご静聴いただき、ありがとうございました!

Recommended