Unity简单的敌人巡逻方法(NavMeshAgent)

简单的敌人巡逻方法

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

你可能感兴趣的:(unity,unity,游戏引擎,c#)