public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;
            if (null == senderObj) return false;
            GameObject obj = senderObj.GfxObj;
            if (null != obj) {
                if (curSectionTime >= StartTime) {
                    GameObject target_obj = senderObj.TargetGfxObj;
                    if (null == target_obj) {
                        return false;
                    }
                    m_RealDeleteTime = m_DeleteTime.Get(instance);
                    if (m_RealDeleteTime <= 0) {
                        m_RealDeleteTime = senderObj.ConfigData.duration;
                        if (m_RealDeleteTime <= 0) {
                            m_RealDeleteTime = EntityController.Instance.GetImpactDuration(senderObj.ActorId, senderObj.SkillId, senderObj.Seq);
                        }
                    }
                    if (m_RealDeleteTime <= 0) {
                        LogSystem.Warn("[skill:{0} dsl skill id:{1}] targeteffect deleteTime <= 0.", senderObj.SkillId, instance.DslSkillId);
                        return false;
                    }
                    string effectPath = m_EffectPath.Get(instance, senderObj.ConfigData.resources);
                    string attachPath = m_AttachPath.Get(instance);
                    GameObject effectObj = null;
                    if (string.IsNullOrEmpty(effectPath)) {
                        LogSystem.Warn("[skill:{0} dsl skill id:{1}] targeteffect effect is empty.", senderObj.SkillId, instance.DslSkillId);
                    } else {
                        effectObj = ResourceSystem.Instance.NewObject(effectPath, m_RealDeleteTime / 1000.0f) as GameObject;
                        if (null == effectObj) {
                            LogSystem.Warn("[skill:{0} dsl skill id:{1}] targeteffect effect {2} can't find.", senderObj.SkillId, instance.DslSkillId, effectPath);
                        }
                    }
                    if (null != effectObj) {
                        TriggerUtil.SetObjVisible(effectObj, true);
                        Transform bone = Utility.FindChildRecursive(target_obj.transform, attachPath);
                        if (null == bone) {
                            bone = obj.transform;
                            LogSystem.Warn("[skill:{0} dsl skill id:{1}] targeteffect bone {2} can't find.", senderObj.SkillId, instance.DslSkillId, attachPath);
                        }
                        effectObj.SetActive(false);
                        if (null != bone) {
                            effectObj.transform.parent = bone;
                            effectObj.transform.localPosition = m_Pos;
                            effectObj.transform.localRotation = m_Dir;
                            effectObj.transform.localScale = m_Scale;
                            if (!m_IsAttach) {
                                effectObj.transform.parent = null;
                            }
                            EffectManager em = instance.CustomDatas.GetData<EffectManager>();
                            if (em == null) {
                                em = new EffectManager();
                                instance.CustomDatas.AddData<EffectManager>(em);
                            }
                            em.AddEffect(effectObj);
                            em.SetParticleSpeed(instance.EffectScale);
                        }
                        effectObj.SetActive(true);
                    }

                    //GameFramework.LogSystem.Debug("TargetEffectTriger:{0}", m_EffectPath);
                    return false;
                } else {
                    return true;
                }
            } else {
                return false;
            }
        }
 public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
 {
     GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;
     if (null == senderObj) return false;
     GameObject obj = senderObj.GfxObj;
     if (null != obj) {
         if (null != senderObj.TrackEffectObj)
             obj = senderObj.TrackEffectObj;
         if (curSectionTime >= StartTime) {
             m_RealDeleteTime = m_DeleteTime.Get(instance);
             if (m_RealDeleteTime <= 0) {
                 m_RealDeleteTime = senderObj.ConfigData.duration;
             }
             if (m_RealDeleteTime <= 0) {
                 LogSystem.Warn("[skill:{0} dsl skill id:{1}] sceneeffect deleteTime <= 0.", senderObj.SkillId, instance.DslSkillId);
                 return false;
             }
             string effectPath = m_EffectPath.Get(instance, senderObj.ConfigData.resources);
             GameObject effectObj = null;
             if (string.IsNullOrEmpty(effectPath)) {
                 LogSystem.Warn("[skill:{0} dsl skill id:{1}] sceneeffect effect is empty.", senderObj.SkillId, instance.DslSkillId);
             } else {
                 effectObj = ResourceSystem.Instance.NewObject(effectPath, m_RealDeleteTime / 1000.0f) as GameObject;
                 if (null == effectObj) {
                     LogSystem.Warn("[skill:{0} dsl skill id:{1}] sceneeffect effect {2} can't find.", senderObj.SkillId, instance.DslSkillId, effectPath);
                 }
             }
             if (null != effectObj) {
                 TriggerUtil.SetObjVisible(effectObj, true);
                 effectObj.SetActive(false);
                 Vector3 pos = obj.transform.TransformPoint(m_Pos);
                 effectObj.transform.position = pos;
                 effectObj.transform.localScale = m_Scale;
                 if (m_IsRotateRelativeUser) {
                     effectObj.transform.parent = obj.transform;
                     effectObj.transform.localRotation = m_Dir;
                     effectObj.transform.parent = null;
                 } else {
                     effectObj.transform.localRotation = m_Dir;
                 }
                 EffectManager em = instance.CustomDatas.GetData<EffectManager>();
                 if (em == null) {
                     em = new EffectManager();
                     instance.CustomDatas.AddData<EffectManager>(em);
                 }
                 em.AddEffect(effectObj);
                 em.SetParticleSpeed(instance.EffectScale);
                 effectObj.SetActive(true);
             }
             return false;
         } else {
             return true;
         }
     } else {
         return false;
     }
 }