追いかけてくる敵の次は「指定した地点を通るように巡回する敵」を作りましょう。これは一見すると難しそうですが、ある工夫をすることで簡単に作ることができます。
工夫:目標となるゲームオブジェクトを設定する
今回プログラムを組む前に考えないといけないことは、「どうやって敵キャラに巡回ルートを教えるか」ということです。NavMeshAgentで実現できることは「行動可能な範囲内」で「ターゲットに向かって移動する」ことだけなので、直接巡回ルートを教え込むことはできません。
そこで一工夫ですが、通過させたい地点に「マーカー」となるゲームオブジェクトを置いておくのはどうでしょうか?マーカーを順番にターゲットに設定していけばキャラクターが経路を巡回するはずです。
巡回する敵キャラクターのC#スクリプト
ではこれをスクリプトに落とし込んでいきます。このゲームではコウモリに今回の役割を割り当てるので、名前を「BatController」にしておいてください。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BatController : BaseEnemyController { int destinationIndex = 0; GameObject[] navPointsObj; protected override void Start() { base.Start(); navPointsObj = GameObject.FindGameObjectsWithTag("NavPoint"); GetNextPoint(); } protected override void Move() { if(navPointsObj.Length == 0) { return; } rigidBody.velocity = agent.desiredVelocity; //今の目標地点に近づいてきたら、次の目標地点を設定 if (!agent.pathPending && agent.remainingDistance < 0.5f) { GetNextPoint(); } } void GetNextPoint() { if(navPointsObj.Length == 0) { return; } target = navPointsObj[destinationIndex].transform; agent.SetDestination(target.position); //配列のインデックスを+1して、最後の地点だった場合は0に戻す destinationIndex = (destinationIndex + 1) % navPointsObj.Length; } }
巡回の目印となるマーカーの作成
ここまでできたらあとはマーカーを作るだけです。空のゲームオブジェクトを作り、タグに「NavPoint」を設定したらプレハブ化して適当にシーンに配置してください。コウモリが巡回移動すれば成功です。