基于NavMeshAgent的敌人巡逻方法。
private NavMeshAgent eagent;//定义一个寻路
private Animator animator;//声明一个动画
public Vector3 [] point;//巡逻范围和位置数量
private int index;//数组位置
private float timer = 0 ;
void Start()
{
animator = GetComponent<Animator>();//获取当前物体动画
eagent = GetComponent<NavMeshAgent>();//获取寻路组件
index = 0;//初始化
}
void NetDnext() {
if (index>=point.Length) {//判断数组长度
index = 0;//初始化
}
//原地等待2秒
if (timer < 0)
{
eagent.SetDestination(transform.position - point[index]);//向目标点移动
index++;
timer = 2f;
animator.SetBool("Forward", true);//播放走路动画
}
else
{
timer -= Time.deltaTime;
animator.SetBool("Forward", false);//播放等待动画
}
}
在Update方法中判断是否抵达目标
void Update()
{
if (eagent.remainingDistance < 0.2f && !eagent.pathPending)//判断是否到达或接近目标点
{
NetDnext();//巡逻方法
}
这个方法需要在外部定义一个Vector3的数组,如5,0,5,移动的位置就是当前位置减去5,0,5,数组的数量越多,巡逻点越多,数字越大巡逻的距离越远,这个方法稍微改动以下可以做成定点巡逻。
可以在判断中加入一个bool,来判断是否有玩家,如果有玩家停止移动攻击玩家,关于玩家进入区域攻击玩家的方法可以参考:Unity简单的敌人范围触发方法