/// <summary> /// 正常寻路,寻路完成后进入Idle状态 /// </summary> /// <param name="self"></param> /// <param name="target"></param> public static void CommonNavigate(this UnitPathComponent self, Vector3 target) { if (!self.Entity.GetComponent <StackFsmComponent>().ChangeState <NavigateState>(StateTypes.Run, "Navigate", 1)) { return; } IdleState idleState = ReferencePool.Acquire <IdleState>(); idleState.SetData(StateTypes.Idle, "Idle", 1); self.MoveTodoSomething(target, self.Entity.GetComponent <StackFsmComponent>().GetCurrentFsmState(), idleState).Coroutine(); }
/// <summary> /// 寻路到某个点然后做某事,如果当前距离小于目标距离则直接进入状态,否则就寻路到适合的地点再进行寻路 /// </summary> /// <param name="self"></param> /// <param name="target">目标地点</param> /// <param name="targetRange">目标距离</param> /// <param name="targetState">目标状态</param> public static void NavigateTodoSomething(this UnitPathComponent self, Vector3 target, float targetRange, AFsmStateBase targetState) { if (Vector3.Distance((self.Entity as Unit).Position, target) >= targetRange) { if (!self.Entity.GetComponent <StackFsmComponent>().ChangeState <NavigateState>(StateTypes.Run, "Navigate", 1)) { ReferencePool.Release(targetState); return; } self.MoveTodoSomething(target, self.Entity.GetComponent <StackFsmComponent>().GetCurrentFsmState(), targetState, targetRange) .Coroutine(); } else { self.Entity.GetComponent <StackFsmComponent>().ChangeState(targetState); } }