简单的敌人巡逻方法
基于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简单的敌人范围触发方法