Unity Navmeshで AIを作ってみよう!


相変わらずとてつもなく大きいものに追いかけられたい・・・



エンジニアのJです!
まだまだでっかい生き物に追いかけられたい!
男子ならこのロマン共感できますよね。



前回はただプレイヤーに追従する恐竜を作りましたが


今日は徘徊して視界に入ったら追いかけてくる
大きい生き物を作ってみようと思います。



簡易AIを超コンパクトに作ってみた!








1、ステージを整える


例によってアセットストアから既存の出来上がってる素材を探します!
今日は人型な気分かなぁ


すごく・・・大きいです・・・///





そしてTerrainを使ってパパッとステージを創りました!
雪山でこのパンツ一丁が徘徊するんですねわかります。

Terrainとテクスチャで雪山っぽくしてるだけです





ヒエラルキー構成はこれだけです
巨人が通れない道をつくるために障害物をwallという名前で置いています。

大地がGround 巨人がbaseMaleです




2、Navmeshをつくる


障害物のwallにNavMesh Obstacleを
徘徊するbaseMaleさんにはNav Mesh Agentをアタッチしました
さらに障害物となる壁をBAKEしてステージの裏側をつくっています。

※Navmeshの詳しい説明はコチラからどうぞ


NavMesh Obstacleをアタッチしています




3、超簡易AIをつくってみよう


下記のようなスクリプトを書いてアタッチするだけです。


using UnityEngine;
using System.Collections;

public class AI : MonoBehaviour {

 public Transform target; //プレイヤーの位置
 static Vector3 pos;
 NavMeshAgent agent; 

 float agentToPatroldistance;
 float agentToTargetdistance;

 void Awake(){
  agent = GetComponent();
 }


 void Start () {
  DoPatrol();
 }


 void Update(){
 //Agentと目的地の距離
 agentToPatroldistance = Vector3.Distance (this.agent.transform.position, pos);

 //Agentとプレイヤーの距離
 agentToTargetdistance = Vector3.Distance(this.agent.transform.position,target.transform.position);


 //プレイヤーとAgentの距離が30f以下になると追跡開始
 if(agentToTargetdistance <= 30f ){
   DoTracking ();
 
 //プレイヤーと目的地の距離が15f以下になると次の目的地をランダム指定
 }else if(agentToPatroldistance < 15f){
   DoPatrol();
 }

  }



//エージェントが向かう先をランダムに指定するメソッド
public void DoPatrol(){
  var x = Random.Range(-50.0f, 50.0f);
  var z = Random.Range(-50.0f, 50.0f);
  pos = new Vector3 (x, 0, z);
  agent.SetDestination (pos);
}

//targetに指定したplayerを追いかけるメソッド
public void  DoTracking(){
  pos = target.position; 
  agent.SetDestination (pos);
}





Update内で常に対象との距離をとって、その距離をトリガー
に巨人の挙動を変えています。

また巨人が停止する事がないように次の目的地に到着する前に
DoPatrolを呼ぶ事で目的地を変更しています。


SetDestinationを再セットする事で、
常に目的地が更新され巡回するAIが簡易的に実装できます。


※target(プレイヤー)はインスペクタ内で指定しています。




4、Oculus Rift対応をする


僕のUnityのバージョンは5.2なのですが、オキュラス対応がかなり楽になりました
Build SettingsのPlayer Settingsから
Virtual Reality Supportedにチェックを入れるだけです!



ここのPlayer Settingsを押して



Virtual Reality Supportedにチェック






5、挙動チェック


では早速追いかけられるために実行してみます!!


 

駆逐してやる・・・











気がついた!











きたっっw












飛ん・・・だ・・・?










あっ・・・














































トンガルマンWebサイト
https://tongullman.co.jp/index.php
facebook
https://www.facebook.com/Tongullman

0 件のコメント:

コメントを投稿