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); }
public override void EnterState(FSMBase fsm) { base.EnterState(fsm); fsmBase = fsm; fsm.anim.GetComponent <AnimationEventBehaviour>().attackHandler += OnFire; }
private void LookAt(FSMBase fsm) { Vector3 position = fsm.player.transform.position; position.y = fsm.transform.position.y; fsm.transform.LookAtPosition(position, fsm.rotateSpeed); }
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); }
/// <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; } } }
public override void ExitState(FSMBase fsm) { base.ExitState(fsm); fsm.anim.SetBool(fsm.enemyStates.chParams.run, false); }
public override void EnterState(FSMBase fsm) { base.EnterState(fsm); fsm.IsPathFindingComplete = false; fsm.anim.SetBool(fsm.enemyStates.chParams.run, true); }
public virtual void ExitState(FSMBase fsm) { }
public virtual void ActionState(FSMBase fsm) { }
//为具体状态类提供可选事件 public virtual void EnterState(FSMBase fsm) { }
//逻辑处理 public abstract bool HandlerTrigger(FSMBase fsm);