怪物可以给怪物设置一个限制的圆心,使其在圆心内进行随机移动也就是巡逻的系统,当有玩家或者别的中立怪物进入它的攻击范围时,则会触发怪物的追踪去攻击闯入的敌人,如果敌人跑出这个范围相反的则怪物是取消追踪,继续之前的状态,巡逻或者待机。
using UnityEngine;
using UnityEngine.AI;
public class MonsterAI : MonoBehaviour
{
Transform player;
bool isAtk = false;
bool isSetPos = false;
Animator ani;
NavMeshAgent nav;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
ani = transform.GetComponent<Animator>();
nav = transform.GetComponent<NavMeshAgent>();
}
public Vector3 target;
void Update()
{
if (!isAtk)
{
if (!isSetPos)
{
ani.SetBool("atk", false);
Vector2 pos = Random.insideUnitCircle * 12;
target = new Vector3(pos.x, 0, pos.y);
nav.SetDestination(target);
ani.SetBool("Run", true);
isSetPos = true;
}
if (Vector3.Distance(transform.position, target) <= 0.3f)
{
nav.ResetPath();
ani.SetBool("Run", false);
isSetPos = false;
}
if (Vector3.Distance(transform.position, player.transform.position) <= 1.5f)
{
transform.LookAt(player);
isAtk = true;
}
}
else
{
if (Vector3.Distance(transform.position, player.transform.position) <= 1.5f)
{
ani.SetBool("Run", false);
nav.ResetPath();
ani.SetBool("atk", true);
}
else
{
isAtk = false;
isSetPos = false;
}
}
}
}