public override void OnUpdate(EKnightState currentState) { var stateInfo = Knight.ASM.Animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.fullPathHash == Knight.ASM.BlockIdleHash && Knight.VO.isBlock) { Knight.ASM.SyncParameters(); return; } if (Knight.VO.action == 0) { if (Knight.VO.speed > 0) { Knight.FSM.SwitchState(EKnightState.MOVE); } else { Knight.FSM.SwitchState(EKnightState.IDLE); } } else if (Knight.VO.action == 2) { Knight.FSM.SwitchState(EKnightState.ATTACK); } }
public override void OnUpdate(EKnightState currentState) { var stateInfo = Knight.ASM.Animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.fullPathHash == Knight.ASM.AttackHash && stateInfo.normalizedTime >= _atkTimes) { _atkTimes++; Knight.ASM.SyncParameters(); if (Knight.VO.action == 0) { if (Knight.VO.speed > 0) { Knight.FSM.SwitchState(EKnightState.MOVE); } else { Knight.FSM.SwitchState(EKnightState.IDLE); } } else if (Knight.VO.action == 1) { Knight.FSM.SwitchState(EKnightState.DEFENCE); } } }
public override void OnUpdate(EKnightState currentState) { if (Knight.VO.speed == 0) { Knight.FSM.SwitchState(EKnightState.IDLE); return; } switch (Knight.VO.action) { case 1: Knight.FSM.SwitchState(EKnightState.DEFENCE); return; case 2: Knight.FSM.SwitchState(EKnightState.ATTACK); return; } CheckMoveState(); Vector3 dir = Knight.VO.moveDir.normalized; Knight.CC.SimpleMove(dir * Knight.VO.speed); Rotation(); }
public override void OnUpdate(EKnightState currentState) { if (Knight.VO.speed > 0) { Knight.FSM.SwitchState(EKnightState.MOVE); return; } switch (Knight.VO.action) { case 1: Knight.FSM.SwitchState(EKnightState.DEFENCE); return; case 2: Knight.FSM.SwitchState(EKnightState.ATTACK); return; } //如果是空闲状态每隔几秒随机切换一个特殊的“打发时间”动画 var stateInfo = Knight.ASM.Animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.fullPathHash == Knight.ASM.Idle1Hash) { idleTypeSwitchCD -= Time.deltaTime; if (idleTypeSwitchCD <= 0) { var random = UnityEngine.Random.Range(0, 6); switch (random) { case 2: Knight.VO.idleType = 2; Knight.ASM.SyncParameters(); break; case 3: Knight.VO.idleType = 3; Knight.ASM.SyncParameters(); break; case 4: Knight.VO.idleType = 4; Knight.ASM.SyncParameters(); break; } idleTypeSwitchCD = 5f; } } }
public override void OnExit(EKnightState toState) { }
public override void OnEnter(EKnightState fromState, object data) { _atkTimes = 1; Knight.ASM.SyncParameters(); }
public override bool CheckSwitchEnable(EKnightState fromState) { return(true); }
public override void OnEnter(EKnightState fromState, object data) { Knight.VO.idleType = 0; Knight.ASM.SyncParameters(); }
public override void OnExit(EKnightState toState) { CheckMoveState(); }
public override void OnEnter(EKnightState fromState, object data) { }
public abstract bool CheckSwitchEnable(EKnightState fromState);
public abstract void OnUpdate(EKnightState currentState);
public abstract void OnExit(EKnightState toState);
public abstract void OnEnter(EKnightState fromState, object data);
public BaseKnightStateController(Knight knight, EKnightState state) { Knight = knight; knight.FSM.RegistState(state, OnEnter, OnExit, OnUpdate, CheckSwitchEnable); }