public override void Act(EnemyStateData data) { float direction = data.enemyMovementController.ChaseTarget(data.currentTarget); data.anim.SetBool("Walking", true); data.anim.SetBool("FacingRight", direction > 0); }
public override bool Decide(EnemyStateData data) { Collider2D[] colliders = new Collider2D[1]; if (data.scanningCollider.OverlapCollider(data.cf2d, colliders) > 0) { data.currentTarget = colliders[0].transform; return(true); } return(false); }
public override void Act(EnemyStateData data) { var soldiers = data.Soldiers; //有战士追战士,没战士追目标 if (soldiers != null && soldiers.Count > 0) { base.Character.Chase(soldiers.First().Position); } else { base.Character.Chase(targetPos); } }
public override void Reason(EnemyStateData data) { var soldiers = data.Soldiers; //判断有无战士 if (soldiers == null || soldiers.Count <= 0) { System.PerformTransition(EnemyTransition.LostSoldier); } //判断是否在攻击范围内 else if (Vector3.Distance(base.Character.Position, soldiers.First().Position) > base.Character.AtkRange) { base.System.PerformTransition(EnemyTransition.LostSoldier); } }
public override void Act(EnemyStateData data) { //判断有无战士 var soldiers = data.Soldiers; if (soldiers == null || soldiers.Count <= 0) { return; } //有战士,攻击第一个 timer -= Time.deltaTime; if (timer > 0) { return; } base.Character.Attack(soldiers.First()); timer = intervel; }
public void Act(EnemyStateData data) { currentState.Act(data); }
public void Reason(EnemyStateData data) { currentState.Reason(data); }
//当前状态的表现,即在当前状态下要做的具体实现,由系统提供生命周期 public abstract void Act(EnemyStateData data);
//状态内部实现状态转换条件的检测,并最终调用系统的PerformTransition方法,进行状态转换,由系统提供生命周期 public abstract void Reason(EnemyStateData data);
public override void Act(EnemyStateData data) { data.anim.SetBool("Walking", false); }
public void UpdateFSM(EnemyStateData data) { Fsm.Reason(data); Fsm.Act(data); }