AI好きな管理人が個人で勉強しているAIの技術を備忘録代わりとして色々と書いていくwikiです

ここでは今話題のゲームエンジン「Unity」でのAIを作る。
Unityそのものの使い方は細かく説明はしないので、もし詳しくUnityの使い方について知りたい方は別途Google等で「Unity 使い方」「Unity 入門」と調べて欲しい。
現時点(2014/08/15)での筆者のUnityのバージョンは「4.5.1f3」である。

AIを作るといったがUnityらしくコードを書いてAIを動かすのではなくアセットを用いてAIを作成していく。
使用するアセットは「RAIN」と呼ばれるもので現状入手出来るRAINは「Rain{indie}」「Rain2.0」の2種類。
ここでは「Rain2.0」を用いる。

ダウンロードはこちらから
http://rivaltheory.com/rain/download/
図の赤枠をクリックすればダウンロードが始まる。


ダウンロードが終わったらUnityを起動。

次に「Rain2.0」をインポートする。
メニューバーから [Assets]→[Import Package]→[Custom Package…]を選ぶ。

筆者はダウンロードしたファイルの保存先をデスクトップに設定しているので、デスクトップに移動し「RAIN_2.0.11.0.unityPackage」を選択。「開く」ボタンを押せば何かウィンドウが開くのでウィンドウの右下にある「Import」をクリックすれば自動的にインポートされる。

インポートが終わると「RAIN Update」とアップデートを促すメッセージが表示されるが「Don’t Allow」を押して構わない。次に出てくるウィンドウでも「OK」を押して良い。

最終的にインポートが終わるとProjectビューに「RAIN」フォルダが出来る。

インポートが終了したら次は「Character Controllerパッケージ」をインポートする。
インポート後はProjectビューに「Standerd Assets」が出来る。

今度は人型モデルをインポートする。
メニューバーから[Window]→[Asset Store]でアセットストアウィンドウが開く。
ここで右上の虫眼鏡マークの検索バーから「MAX」と入力し検索をするとサーチ結果の左上に「Max Adventure Model」があるので、それをインポートする。

インポートが終われば前準備は終了。

次は実際にAIを作っていく。
作る前にMAXにはどのように振る舞わせるかを箇条書きで説明しておく。
・あるポイントを巡回させる
・プレイヤーがMAXの視野内に入ればプレイヤーを追いかける
・プレイヤーと一定距離近づけばプレイヤーを攻撃する

モデルをフィールドに立たせるために床を用意する。
メニューバーの[GameObject]→[Create Other]→[Plane]で床を作成。
位置は「0, 0, 0」でスケールを「3, 3, 3」とする。
同様の手順で「Directional light」を作成する。
Directional lightの位置やスケールはなんでも良いので好きな値を入れて良い。

床やライトを作成したら次はMAXをフィールドに配置する。
位置は「0, 0, 10」とする。

HierarchyビューでMAXを選択しメニューバーから[RAIN]→[Create AI]を選択。

すると、Inspectorビューにこのようなウィンドウが出る。

HierarchyビューのMAXの子オブジェクトとして「AI」というGameObjectが作成された。これがMAXのAI本体である。

上記の箇条書きで書いた「あるポイントを巡回させる」を実装していく。
メニューバーから[RAIN]→[Create Waypoint Route]を選択
Hierarchyビューに「Waypoint Route」オブジェクトが作成された。Waypoint Routeオブジェクトの名前を「PatrolRoute」に変更する。
Inspectorビューにあるウィンドウから「Add(Ctrl W)」をクリック。
Sceneビューに妙なオブジェクトが表示された。これはAIが移動するためのポイントを示す。別名「Waypoint(ウェイポイント)」。
このウェイポイントをあと3つ追加する。追加はInspectorビューのウィンドウから「Add(Ctrl W)」で追加できる。
4つのウェイポイントの位置は図のようにしておく。


ウェイポイントを作成し各ウェイポイントを配置し終えたら次は「Navigation Mesh」を作成する。
メニューバーから[RAIN]→[Create Navigation Mesh]をクリック。
Hierarchyビューに「Navigation Mesh」オブジェクトが作成され、Sceneビューに黒枠で箱が表示された。
Navigation Meshの位置は「0, 0, 0」でスケールを「3, 1, 3」とすれば綺麗に床を覆うようになる。
Navigation Meshの作成、位置やスケールの調整を行ったらInspectorビューにあるウィンドウから「Generate Navigation Mesh」をクリック。

Sceneビューを見ると床を覆うように色のついた何かが表示された。
これでNavigation Meshの作成は終了。

AIを巡回させるための用意は完了したがこれだけではまだAIを歩かせる事は出来ない。(実行すればわかるがAIは微動だにしない)
では、実際にポイントを巡回させるようにプログラムを組んでいく。
プログラムはRAINが提供している機能の1つである「Behavior Tree」を用いる。
Behavior Treeが一体どういうものかはここでは説明しない。

HierarchyビューのMAXの子オブジェクトである「AI」オブジェクトを選択。
Inspectorビューにあるウィンドウの人の頭の形をしたアイコンをクリック。

クリックの後、下にある「Open Behavior Editor」をクリック。
するとBehavior Editorビューが表示される。
RAINのBehavior Treeはこのエディタ内で作成する。
Behavior Editorビューの右端にあるボタンを押すと2つほど項目が出るのでその中の「Create New Behavior Tree」をクリック。
Behavior Treeの名前を入力するよう求められるのでここでは「Patrol」とする。
名前を入力し「OK」を押すと今度はBehavior Editorビューの左端にアイコンのような物が表示された。

左端のアイコンから「SEQ root」を右クリックし[Create]→[Actions]→[Choose Patrol Waypoints]を選択。

新しくアイコンが追加された。(WAY waypointpatrol)
Behavior Editorビュー右端にある項目の「Waypoint Route」を「PatrolRoute」にし「Loop Type」を「Loop」、「Move Target Variable」に「NextPoint」にする。

次に「WAY waypointpatrol」を右クリックし[Create]→[Actions]→[Move]をクリック。

また新しく「move」というアイコンが出来た。
WAY waypointpatrolと同様にBehavior Editor ビュー右端の項目を変更する。
「Move Target」を「NextPoint」に。「Move Speed」を「2」に変更する。

変更し終えたら、作成したBehavior TreeをAIに適用する。
HierarchyビューのMAXの子オブジェクトである「AI」を選択し頭の形をしたアイコンをクリック。
2つある項目のうち「Behavior Tree Asset」の右端にある二重丸アイコンをクリック。
ウィンドウが出るので「Assets」タブの「Patrol」をダブルクリック。
これで先ほど作成したBehavior Treeが適用された。

実行をしてみると設定したウェイポイントを繰り返し辿るような振る舞いを行う。
上記の箇条書きで書いた「あるポイントを巡回させる」を実装できた。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます