예제 #1
0
        public override void Action(FSMBase fsm)
        {
            base.Action(fsm);

            //如果到达目标点
            if (Vector3.Distance(fsm.transform.position, fsm.wapPoints[index].position) <= fsm.patrolArrivalDistance)
            {
                //最后一个路点
                if (index == fsm.wapPoints.Length - 1)
                {
                    switch (fsm.patrolMode)
                    {
                    case PatrolMode.Once:
                        fsm.isPatrolComplete = true;    //完成巡逻
                        return;

                    case PatrolMode.PingPong:
                        Array.Reverse(fsm.wapPoints);
                        break;
                    }
                }
                //索引增加
                index = (index + 1) % fsm.wapPoints.Length;
            }
            //移动
            fsm.MoveToTarget(fsm.wapPoints[index].position, fsm.patrolSpeed, fsm.patrolArrivalDistance);
            //旋转
            Vector3 lookPos = fsm.wapPoints[index].position;

            lookPos.y = fsm.transform.position.y;
            fsm.transform.LookPosition(lookPos, fsm.rotateSpeed);
        }
예제 #2
0
 public override void ActionState(FSMBase fsm)
 {
     base.ActionState(fsm);
     Debug.DrawLine(fsm.transform.position, fsm.targetTF.position);
     //fsm.MoveToTarget(fsm.targetTF.position, fsm.status.attackDistance - 0.1f, fsm.runSpeed);
     fsm.MoveToTarget(fsm.targetTF, fsm.status.attackDistance - 0.1f, fsm.runSpeed);
 }
예제 #3
0
 public override void Action(FSMBase fsm)
 {
     base.Action(fsm);
     if (fsm.targetTF == null)
     {
         return;
     }
     fsm.MoveToTarget(fsm.targetTF.position, fsm.moveSpeed, fsm.chStatus.attackDistance);
 }
 private void LoopPatrolling(FSMBase fsm)
 {
     if (fsm.wayPoints[index].GetComponent <Collider2D>().OverlapPoint(fsm.transform.position))
     {
         index = (index + 1) % fsm.wayPoints.Length;
     }
     fsm.canMove = true;
     fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed);
 }
예제 #5
0
 private void PatrolLoop(FSMBase fsm)
 {
     //循环 A B C A B C
     if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f)
     {
         index = (index + 1) % fsm.wayPoints.Length;
     }
     //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed);
     fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed);
 }
 private void OncePatrolling(FSMBase fsm)
 {
     if (fsm.wayPoints[index].GetComponent <Collider2D>().OverlapPoint(fsm.transform.position))
     {
         if (index == fsm.wayPoints.Length - 1)
         {
             fsm.isPatrolComplete = true;
             return;
         }
         index++;
     }
     fsm.canMove = true;
     fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed);
 }
예제 #7
0
        private void PatrolOnlyOnce(FSMBase fsm)
        {
            int randomIndex;

            while (true)
            {
                randomIndex = UnityEngine.Random.Range(0, fsm.wayPoints.Length);
                if (currentIndex != randomIndex)
                {
                    break;
                }
            }
            currentIndex = randomIndex;
            fsm.MoveToTarget(fsm.wayPoints[currentIndex], 0, fsm.walkSpeed);
        }
예제 #8
0
        private void PatrolOnce(FSMBase fsm)
        {
            if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f)
            {
                if (index == fsm.wayPoints.Length - 1)
                {
                    fsm.isPatrolComplete = true;
                    return;
                }
                index++;
            }

            //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed);
            fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed);
        }
예제 #9
0
 private void PatrolPingPong(FSMBase fsm)
 {
     //—— 往返 A B C B A
     if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index].position) <= 0.5f)
     {
         if (index == fsm.wayPoints.Length - 1)
         {
             //数组反转
             Array.Reverse(fsm.wayPoints);
             index++;
         }
         index = (index + 1) % fsm.wayPoints.Length;
     }
     //fsm.MoveToTarget(fsm.wayPoints[index].position, 0, fsm.walkSpeed);
     fsm.MoveToTarget(fsm.wayPoints[index], 0, fsm.walkSpeed);
 }
예제 #10
0
 public override void ActionState(FSMBase fsm)
 {
     base.ActionState(fsm);
     fsm.canMove = true;
     fsm.MoveToTarget(fsm.targetTF.position, fsm.attackDistance, fsm.runSpeed);
 }