/// <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);
            }
        }