|  |  | 
 |  |  | { | 
 |  |  |     protected SkillConfig skillConfig; | 
 |  |  |     protected BattleObject caster; | 
 |  |  |     protected H0604_tagUseSkillAttack tagUseSkillAttack;// 目标列表 | 
 |  |  |     protected HB427_tagSCUseSkill tagUseSkillAttack;// 目标列表 | 
 |  |  |  | 
 |  |  |     public SkillEffect(SkillConfig _skillConfig, BattleObject _caster, H0604_tagUseSkillAttack _tagUseSkillAttack) | 
 |  |  |     protected bool isFinish = false; | 
 |  |  |  | 
 |  |  |     protected bool isFinishFrameEnd = false; | 
 |  |  |  | 
 |  |  |     protected Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit; | 
 |  |  |  | 
 |  |  |     public SkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack) | 
 |  |  |     { | 
 |  |  |         skillConfig = _skillConfig; | 
 |  |  |         caster = _caster; | 
 |  |  |         tagUseSkillAttack = _tagUseSkillAttack; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Action OnHit; // 表现到达目标时回调 | 
 |  |  |  | 
 |  |  |     //   | 
 |  |  |     public virtual void Play(Action<int, List<H0604_tagUseSkillAttack.tagSkillHurtObj>> _onHit) | 
 |  |  |     public virtual void Play(Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit) | 
 |  |  |     { | 
 |  |  |         // OnHit = _onHit; | 
 |  |  |         // switch (skillConfig.effectType) | 
 |  |  |         // { | 
 |  |  |         //     case SkillEffectType.StageEffect: | 
 |  |  |         //         Debug.LogError("播放场景特效"); | 
 |  |  |         //         break; | 
 |  |  |         //     case SkillEffectType.Bullet: | 
 |  |  |         //         // 伪代码:表现子弹飞行 | 
 |  |  |         //         Debug.Log("播放子弹特效"); | 
 |  |  |         //         // 到达目标时 | 
 |  |  |         //         OnHit?.Invoke(); | 
 |  |  |         //         break; | 
 |  |  |         //     case SkillEffectType.Direct: | 
 |  |  |         //         // 伪代码:直接在目标身上播放特效 | 
 |  |  |         //         Debug.Log("播放直接特效"); | 
 |  |  |         //         OnHit?.Invoke(); | 
 |  |  |         //         break; | 
 |  |  |         //     case SkillEffectType.BuffEffect: | 
 |  |  |         //         // 伪代码:播放持续特效 | 
 |  |  |         //         Debug.Log("播放Buff特效"); | 
 |  |  |         //         break; | 
 |  |  |         //     default: | 
 |  |  |         //         break; | 
 |  |  |         // } | 
 |  |  |         onHit = _onHit; | 
 |  |  |         if (skillConfig.EffectId > 0) | 
 |  |  |         { | 
 |  |  |             caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.EffectId, caster.heroRectTrans, caster.Camp); | 
 |  |  |         } | 
 |  |  |         if (skillConfig.EffectId2 > 0) | 
 |  |  |         { | 
 |  |  |             caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.EffectId2, caster.heroRectTrans, caster.Camp); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public virtual void Run() | 
 |  |  |     { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public virtual void OnMiddleFrameEnd(int times, int hitIndex) | 
 |  |  |     { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public virtual void OnMiddleFrameStart(int times) | 
 |  |  |     { | 
 |  |  |         if (skillConfig.MStartEffectId <= 0) | 
 |  |  |             return; | 
 |  |  |         //  中摇固定特效 | 
 |  |  |         caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.MStartEffectId, caster.heroGo.transform, caster.Camp); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |     /// <summary> | 
 |  |  |     /// 后摇开始 | 
 |  |  |     /// </summary> | 
 |  |  |     public virtual void OnFinalFrameStart() | 
 |  |  |     { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /// <summary> | 
 |  |  |     /// 后摇结束 | 
 |  |  |     /// </summary> | 
 |  |  |     public virtual void OnFinalFrameEnd() | 
 |  |  |     { | 
 |  |  |         isFinishFrameEnd = true; | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |     public virtual bool IsFinished() | 
 |  |  |     { | 
 |  |  |         return isFinish && isFinishFrameEnd; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public virtual void ForceFinished() | 
 |  |  |     { | 
 |  |  |         isFinish = true; | 
 |  |  |         isFinishFrameEnd = true; | 
 |  |  |     } | 
 |  |  | } |