Unity AssetStoreまとめ

アセットストア日替わりタイムセールの記事を書いていきます。

Behavior Designer ナビゲーションでプレイヤーを追いかけるNPC作りに挑戦!(セールじゃないよ)

f:id:assetsale:20170705172906j:plain

f:id:assetsale:20170705172910j:plain

Behavior Designer

エディタ拡張/ビジュアルスクリプテリング

$81.00    割引無し

 

今回は、「Behavior Designer」でNPC作りをしてみた記事です。

 

かなり初心者向けで、

これからはじめる方の参考用としてのチュートリアルっぽい内容です。
 

「NPCのAI作りでアセット買ったけど使えなかった」とガッカリされてる方もぜひ試してみて下さい。

 

AI作りのアセットでオススメは?

本題に入る前に、まずはAI系のアセットについてのお話。

 

AI作りで一番長く使ってたアセットは「ICode($54)」です。

f:id:assetsale:20170705182713j:plain

Behavior Designerは、拡張アセットも同時に買っておかないと「初心者にはハード」ですが、ICodeはある程度の機能が既に含まれてるし、Animatorみたいな作りだから初見でもわかりやすかった。

 

 

次に私が挑戦したいのは、日本作家さんのFSM

拡張しやすいFSM : 『Arbor 2』($21.60)」

f:id:assetsale:20170705182912j:plain

日本作家さんのアセットだから日本語で学習できるという点が最大のポイント。

 

AI抜きにして、Unityのゲーム作りの基礎をここから学べるハズ。

定価でも安いし、無料体験版で実際にお試しすることも出来ます。

 

さらに、有料アセットランキングTOP99以内(2017年7月7日時点)に含まれてるのが本当に凄いです!

 

 

Behavior Designerを使ってみた

 

 

目的:辺りを彷徨き、プレイヤーが視界に入ったら迫る

こちらのサイトの方からのコメントを頂きまして、それで試してみたくなりました。

 

問題点

公式に上がってる動画の通りやろうと思ってもversionが違うのか、動作が違う。

視界に入ったのがわかっても通り過ぎてまたパトロールに戻る。

 

本当の最初の最初から試してみましょう!

 

1.まずは地形作り

・床(PlaneでもTerrainでもOK)

・壁(CubeでOK。それっぽく置く)

・プレイヤー(ユニティちゃんにしたけど、何でもOK)

・敵(赤いシリンダーにした)

を配置します。

f:id:assetsale:20170705190939j:plain

 

2.NavMeshを作る前の下準備

 

「壁」と「床」のオブジェクト全てにstaticのチェックを入れます。

これをしないとNavMeshが作れません。

f:id:assetsale:20170705192758j:plain

 

 

3.NavMeshウィンドウを開いて実行

 

「Window」->「Navigation」を選択し、ウィンドウを開きます。

ヘッダにある3つ内、真ん中の「Bake」を選択する。

f:id:assetsale:20170705193436p:plain

パラメータは↑を参考にするか、地形に合わせて調整

「Bake」を実行するとシーンビューに水色のNavMeshが生成されます。

 

※されなかったら手順2が不足か、Planeの座標が0,0,0かチェック。

f:id:assetsale:20170705193832j:plain

NavMeshの形状がイマイチだったら「Clear」してパラメータを再調整して「Bake」を繰り返します。

 

 

 4.シリンダー(NPC)に「Nav Mesh Agent」コンポーネントをアタッチ

 

f:id:assetsale:20170705213040p:plain

Component->Navigation->Nav Mesh Agent

パラメータはデフォルトのままでOK。

f:id:assetsale:20170705215149p:plain

 

5.試しに動かしてみる

いきなりBehavior Designerで動かすのでは無く、

簡単なコードでNavMeshが正常に動くか先に試した方が不具合の可能性を減らせます。

 

MoveTest.csを作成

 

using UnityEngine;

public class MoveTest : MonoBehaviour {

	public Transform goal;

	void Update() {
		UnityEngine.AI.NavMeshAgent agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
		agent.destination = goal.position; 
	}
}

 

MoveTestコンポーネントをシリンダーにアタッチして、

Goalにユニティちゃん(行き先のオブジェクト)を指定して開始しましょう。

f:id:assetsale:20170706035646p:plain

f:id:assetsale:20170706145207g:plain

※テストが終わったら必ず「Move Test」が動作しないようにRemove ComponentするかActiveのチェックを外してください。

 

 

6.Behavior Designerを開始する

お待たせしました!Behavior Designerをこれからはじめます。

 

f:id:assetsale:20170706145938p:plain

Tools -> Behavior Designer -> Editorを開きます

 

エディタ画面

f:id:assetsale:20170706173304p:plain

Hierarchyでシリンダーを選択した状態で作業を始めます。

 

f:id:assetsale:20170706173728j:plain

Behavior Designウィンドウで右クリックして

Add Task -> Actions -> Basic -> NavMeshAgent -> Set Destination

を選択します。

 

※Basicの下にMovementがあるのは、

拡張パック「Behavior Designer - Movement Pack」をインポートしているからです。

後にこれを使いますが、まずは無しの状態で動かす方法を解説します。

 

 

f:id:assetsale:20170706174319p:plain

Set Destinationをクリックします。

 

f:id:assetsale:20170706174447p:plain

Inspector(エディタ内の)を開きます。

 

Target Game Object:動かすキャラクター

Destination:行き先

 

この2点を入れれば進んでくれるので埋めていこう。

 

Target Game Objectに、自身のオブジェクト(シリンダー)をバインドします。

Destinationは、、、今はNone以外選択できません。

 

Destination用の変数を作る

 

Variablesタブを開きます。

f:id:assetsale:20170706175537p:plain

Nameはユニティちゃんの位置。わかりやすく「goal」と入れました。

Typeは「Vector3」を選択しましょう。

f:id:assetsale:20170706180004p:plain

Addをクリックするか、Nameでエンターキーを入力すると追加されます。

 

次に、右側の×の隣りに「▷」アイコンがありますので、

そこに行き先となるオブジェクトのTransform -> positionを選択します。

f:id:assetsale:20170706175958p:plain

f:id:assetsale:20170706180707p:plain

 

Inspectorタブから、Set Destinationに戻って

 

f:id:assetsale:20170706180824p:plain

Target Game Object:動かすキャラクター

Destination:行き先

をセットします。

 

実行してみましょう。

f:id:assetsale:20170706181312g:plain

無事にユニティちゃんの元に辿り付くことが出来ました。

しかし、動かすと止まってしまい向かってきません。

 

ループ設定にする

f:id:assetsale:20170706181505p:plain

デフォルトの状態では、一度限りの処理になっているようなので、

Restart When Completeにチェックを入れて再スタートしてみると、

 

f:id:assetsale:20170706172954g:plain

追いかけ回されるようになりました。

 

Behavior Designer単体だけを使ったNavMeshで追いかける方法は以上です。

 

ちなみに、拡張パック「Behavior Designer - Movement Pack」があれば

こんな面倒な事をしなくても、さらに簡単に作れる様になっています。

 

拡張パック付きのビヘイビアを組んでみた

jbutaさんの記事を参考に

 

>敵は普段パトロールモードで移動してて、近づいたら接近する。

 

jbutaさんが選んだActionを元に設計して

とりあえず動くように改修してみた。

f:id:assetsale:20170706203812j:plain

通常はパトロールで、青色の位置を行ったり来たりします。

 

近づくと音に反応(適当なサウンドでユニティちゃんが鳴りっぱなしの状態)して、

プレイヤーの方向へ向かいます。

f:id:assetsale:20170706221441g:plain

Conditional Evaluatorでターゲットが一定の距離にいるか判断して、

逃げ切れたらパトロールモードに戻るようにしました。

f:id:assetsale:20170706221352g:plain

左上の「サウンド:OFF」に注目して、音を切ると敵が見失ってパトロールへ戻る。

 

各ビヘイビアの設定に関しては、

エクスポートしたファイルをチェックしてみて下さい。

EnemyBehavior.asset ダウンロード

 

「視界に入った」の判定

サンプルシーンのビヘイビア「Can See Object」を見てみると

f:id:assetsale:20170707014105g:plain

とってもシンプルな作り

f:id:assetsale:20170707014237p:plain

Until Success:子タスクが成功するまで実行し続ける。発見するまでSeekへ行かない

 

Can See Objectで視界に入ったDefaultレイヤーのオブジェクトが、

Returned Objectに格納されて成功を返します。

f:id:assetsale:20170707014232p:plain

※キャラの場合はプレイヤーのレイヤーをPlayerにして(子も全て)

 Use Target Boneにチェックを付けると判定されました。

 

ちなみに、赤丸の所をクリックすると

Variablesで作った変数に切り替えが出来ます。

f:id:assetsale:20170707032054j:plain

視界に入ったDefaultレイヤーのオブジェクトがFoundObjectに格納される状態。

 

今回はここまで

ざっくりと、こんな事できますよ程度な内容でしたが、

好評でしたら続きもやってみようと思います。