private void OnStateMachineComplete(StateMachine machine)
        {
            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("OnStateMachineComplete->技能释放完成  ------>  Entity = {0} , 主角 = {1},技能类型 = {2} ,{3}, 技能ID ={4}",
                                                                          m_ISpacecraftSkillProperty.EntityId(),
                                                                          m_ISpacecraftSkillProperty.IsMain(),
                                                                          m_Context.GetObject <SkillData>().BaseData.Value.CategoryType,
                                                                          IsWeaponSkill?"武器技能":"飞船技能",
                                                                          SkillID
                                                                          ));



            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC != null)
            {
                skillRPC.Close();
            }
            skillRPC = null;
            m_Context.DeleteObject <SkillRPCNet>();
            m_Context.Clear();
            m_RunningData.Reset();
            if (IsWeaponSkill)
            {
                SendEvent(ComponentEventName.WeaponSkillFinish, new WeaponSkillFinish()
                {
                    IsMain = m_ISpacecraftSkillProperty.IsMain(), skillId = SkillID
                });
            }
            SkillID       = -1;
            IsWeaponSkill = false;
            StageType     = SkillStageType.None;
            m_ISpacecraftSkillProperty.GetPerceptronTarget().ClearSkilltargetEntitys();
        }
        /// <summary>
        /// 释放技能
        /// </summary>
        /// <param name="skillId"></param>
        public void ReleaseSkill(int skillid)
        {
            SkillID       = skillid;
            IsWeaponSkill = IsWeapon(SkillID);

            SkillData skillData = m_CfgEternityProxy.GetSkillData(SkillID);

            m_Context.AddObject <SkillData>(skillData);

            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("OnStateMachineComplete->执行释放技能  ------>  Entity = {0} , 主角 = {1},技能类型 = {2} ,{3}, 技能ID ={4}, IsTrigger = {5} ",
                                                                          m_ISpacecraftSkillProperty.EntityId(),
                                                                          m_ISpacecraftSkillProperty.IsMain(),
                                                                          skillData.BaseData.Value.CategoryType,
                                                                          IsWeaponSkill ? "武器技能" : "飞船技能",
                                                                          SkillID,
                                                                          skillData.BaseData.Value.IsTrigger
                                                                          ));

            PrepareRunningData(SkillID);

            if (m_ISpacecraftSkillProperty.IsMain())
            {
                SkillRPCNet skillRPC = new SkillRPCNet(RpcCloseAction);
                m_Context.AddObject <SkillRPCNet>(skillRPC);
            }

            m_StageType = SkillStageType.Begin;
            m_StateMachine.SetInitialState(SkillStateToken.Begin);

            //进度条隐藏显示
            ShowProgressBar(true);
        }
        /// <summary>
        /// 蓄力---->按下begin,抬起通信release,end
        /// </summary>
        /// <param name="skillData"></param>
        private void ToCastAccumulationSkill(SkillData skillData, bool isdown)
        {
            uint        entityId = (uint)m_ISpacecraftSkillProperty.EntityId();
            uint        skillId  = (uint)skillData.Id;
            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC == null)
            {
                return;
            }

            if (isdown) //按下
            {
                Leyoutech.Utility.DebugUtility.Log("蓄力", " 按下");

                AccumulationSkill skillA = new AccumulationSkill();
                skillA.AccumulationSkillBegin          = new global::Crucis.Protocol.AccumulationSkillBegin();
                skillA.AccumulationSkillBegin.CasterId = entityId;
                skillA.AccumulationSkillBegin.SkillId  = skillId;
                skillRPC.CreatListenerCastAccumulationSkill(entityId, skillId);
                skillRPC.CastAccumulationSkillWright(entityId, skillId, skillA);
            }
            else //抬起
            {
                Leyoutech.Utility.DebugUtility.Log("蓄力", " 抬起");
                Vector3 direction = Vector3.zero;
                List <Crucis.Protocol.TargetInfo> targetList = m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, true, skillData.BaseData.Value.TagercalculationType);
                AccumulationSkill skillA = new AccumulationSkill();
                skillA.AccumulationSkillEnd          = new global::Crucis.Protocol.SkillSelectTargetInfo();
                skillA.AccumulationSkillEnd.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId();
                skillA.AccumulationSkillEnd.SkillId  = (uint)skillData.Id;
                skillA.AccumulationSkillEnd.TargetList.Add(targetList);

                MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>();
                float d = skillData.BaseData.Value.MaxDistance; //* SceneController.SKILL_PRECISION;
                Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d);
                skillA.AccumulationSkillEnd.Quat = vec4;

                skillRPC.CastAccumulationSkillWright(entityId, skillId, skillA);

                if (skillData.BaseData.Value.IsNeedTarget && (targetList == null || targetList.Count == 0))
                {
                    StageType = SkillStageType.None;
                }
            }
        }
        /// <summary>
        ///吟唱,前摇 ,验证目标,技能是否可继续释放
        /// </summary>
        private void ToCastSingSkill(SkillData skillData)
        {
            MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>();
            float d = skillData.BaseData.Value.MaxDistance;//* SceneController.SKILL_PRECISION;

            Vector3 direction = Vector3.zero;
            List <Crucis.Protocol.TargetInfo> targetInfos = m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(true, out direction, true, skillData.BaseData.Value.TagercalculationType);
            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC == null)
            {
                return;
            }

            Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d);

            skillRPC.CreatListenerCastSkill((uint)m_ISpacecraftSkillProperty.EntityId(), (uint)skillData.Id, targetInfos, vec4);
        }
        /// <summary>
        /// 角色Entiy 被销毁时
        /// </summary>
        public override void OnDestroy()
        {
            base.OnDestroy();
            m_ISpacecraftSkillProperty.SetChangeGuideSkillTargetAction(null);
            m_ISpacecraftSkillProperty.SetSkillBttonIsDown(false);
            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC != null)
            {
                skillRPC.Close();
            }
            skillRPC = null;

            m_Context.Clear(true);
            m_RunningData              = null;
            m_CfgEternityProxy         = null;
            m_Context                  = null;
            m_StateMachine             = null;
            m_ISpacecraftSkillProperty = null;
        }
        /// <summary>
        /// 释放引导技能 guidState : 1 按下,2 改变 ,3 抬起
        /// </summary>
        private void ToCastGuideSkill(SkillData skillData, int guidState)
        {
            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillData.ByteBuffer == null || skillRPC == null)
            {
                return;
            }

            uint entityId = (uint)m_ISpacecraftSkillProperty.EntityId();
            uint skillId  = (uint)skillData.Id;

            switch (guidState)
            {
            case 1:     //按下
            {
                Leyoutech.Utility.DebugUtility.Log("引导技能", " 按下");


                GuideSkill guideSkill = new GuideSkill();
                guideSkill.GuideSkill_          = new global::Crucis.Protocol.SkillSelectTargetInfo();
                guideSkill.GuideSkill_.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId();
                guideSkill.GuideSkill_.SkillId  = (uint)skillData.Id;
                Vector3 direction = Vector3.zero;
                guideSkill.GuideSkill_.TargetList.Add(m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, true, skillData.BaseData.Value.TagercalculationType));
                if (guideSkill.GuideSkill_.TargetList.Count == 0)
                {
                    Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----按下 :Null ");
                }

                for (int i = 0; i < guideSkill.GuideSkill_.TargetList.Count; i++)
                {
                    Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----按下 :" + guideSkill.GuideSkill_.TargetList[i].TargetId);
                }


                MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>();
                float d = skillData.BaseData.Value.MaxDistance;        // * SceneController.SKILL_PRECISION;
                Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d);
                guideSkill.GuideSkill_.Quat = vec4;
                skillRPC.CreatListenerCastGuideSkill(entityId, skillId);
                skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill);
            }
            break;

            case 2:    //目标改变
            {
                Leyoutech.Utility.DebugUtility.Log(" 引导技能", "目标改变");

                GuideSkill guideSkill = new GuideSkill();
                guideSkill.ChangeTarget          = new global::Crucis.Protocol.ChangeGuideSkillTargetInfo();
                guideSkill.ChangeTarget.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId();
                guideSkill.ChangeTarget.SkillId  = (uint)skillData.Id;
                Vector3 direction = Vector3.zero;
                guideSkill.ChangeTarget.TargetList.Add(m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, false));

                if (guideSkill.ChangeTarget.TargetList.Count == 0)
                {
                    Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----目标改变 :Null ");
                }

                for (int i = 0; i < guideSkill.ChangeTarget.TargetList.Count; i++)
                {
                    Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----目标改变 :" + guideSkill.ChangeTarget.TargetList[i].TargetId);
                }


                MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>();
                float d = skillData.BaseData.Value.MaxDistance;        // * SceneController.SKILL_PRECISION;
                Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d);
                guideSkill.ChangeTarget.Quat = vec4;
                skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill);
            }
            break;

            case 3:    //抬起
            {
                Leyoutech.Utility.DebugUtility.Log("引导技能", " 抬起");

                GuideSkill guideSkill = new GuideSkill();
                guideSkill.GuideEnd          = new global::Crucis.Protocol.GuideSkillEnd();
                guideSkill.GuideEnd.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId();
                guideSkill.GuideEnd.SkillId  = (uint)skillData.Id;
                skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill);
            }
            break;

            default:
                break;
            }
        }