Ejemplo n.º 1
0
        public override void ActionState(FSMBase fsm)
        {
            base.ActionState(fsm);
//             switch (fsm.patrolMode)
//             {
//                 case PatrolMode.Once:
//                     OncePatrolling(fsm);
//                     break;
//                 case PatrolMode.Loop:
//                     LoopPatrolling(fsm);
//                     break;
//                 case PatrolMode.PingPong:
//                     PingPongPatrolling(fsm);
//                     break;
//             }
            if (Vector3.Distance(fsm.transform.position, fsm.wayPoints[index]) < 0.5f)
            {
                if (index == fsm.wayPoints.Length - 1)
                {
                    //完成巡逻
                    fsm.IsPathFindingComplete = true;
                    return;//退出
                }
                index++;
            }
            //fsm.wayPoints[2].position;
            // fsm.MoveToTarget(fsm.wayPoints[index].position,0,fsm.walkSpeed);
            fsm.transform.position = Vector3.MoveTowards(fsm.transform.position, fsm.wayPoints[index], Time.deltaTime * fsm.runSpeed);
            //fsm.transform.LookAt(fsm.wayPoints[index].position);
            fsm.transform.LookAtPosition(fsm.wayPoints[index], fsm.rotateSpeed);
        }
Ejemplo n.º 2
0
        public override void EnterState(FSMBase fsm)
        {
            base.EnterState(fsm);
            fsmBase = fsm;

            fsm.anim.GetComponent <AnimationEventBehaviour>().attackHandler += OnFire;
        }
Ejemplo n.º 3
0
        private void LookAt(FSMBase fsm)
        {
            Vector3 position = fsm.player.transform.position;

            position.y = fsm.transform.position.y;
            fsm.transform.LookAtPosition(position, fsm.rotateSpeed);
        }
Ejemplo n.º 4
0
        public override void ActionState(FSMBase fsm)
        {
            base.ActionState(fsm);
            if (atkTime <= Time.time)
            {
                fsm.anim.SetBool(fsm.enemyStates.chParams.Attack01, true);
                //fsm.skillSystem.UseRandomSkill();
                atkTime = Time.time + fsm.enemyStates.attacklnterval;
            }

            LookAt(fsm);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 检测当前状态是否满足
 /// </summary>
 public void Reason(FSMBase fsm)
 {
     for (int i = 0; i < Triggers.Count; i++)
     {
         if (Triggers[i].HandlerTrigger(fsm))
         {
             //从映射表中获取输出状态
             FSMStateID StateID = map[Triggers[i].TriggerID];
             //切换状态
             fsm.ChangeActiveState(StateID);
             return;
         }
     }
 }
Ejemplo n.º 6
0
 public override void ExitState(FSMBase fsm)
 {
     base.ExitState(fsm);
     fsm.anim.SetBool(fsm.enemyStates.chParams.run, false);
 }
Ejemplo n.º 7
0
 public override void EnterState(FSMBase fsm)
 {
     base.EnterState(fsm);
     fsm.IsPathFindingComplete = false;
     fsm.anim.SetBool(fsm.enemyStates.chParams.run, true);
 }
Ejemplo n.º 8
0
 public virtual void ExitState(FSMBase fsm)
 {
 }
Ejemplo n.º 9
0
 public virtual void ActionState(FSMBase fsm)
 {
 }
Ejemplo n.º 10
0
 //为具体状态类提供可选事件
 public virtual void EnterState(FSMBase fsm)
 {
 }
Ejemplo n.º 11
0
        //逻辑处理

        public abstract bool HandlerTrigger(FSMBase fsm);