敵キャラクターの作り方3:巡回する敵

追いかけてくる敵の次は「指定した地点を通るように巡回する敵」を作りましょう。これは一見すると難しそうですが、ある工夫をすることで簡単に作ることができます。

スポンサーリンク

工夫:目標となるゲームオブジェクトを設定する

今回プログラムを組む前に考えないといけないことは、「どうやって敵キャラに巡回ルートを教えるか」ということです。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」を設定したらプレハブ化して適当にシーンに配置してください。コウモリが巡回移動すれば成功です。

次のページ→敵キャラクターの作り方4:ランダムな地点に向かう敵