yyl
2 天以前 4fde2056587a8392893ddc243b6832c17492f1a8
125 战斗 散射偶尔出现特效残留的问题
1个文件已修改
33 ■■■■■ 已修改文件
Main/System/Battle/SkillEffect/BulletSkillEffect.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -13,6 +13,10 @@
    protected List<BulletCurve> bulletCurves = new List<BulletCurve>();
    // 散射技能击中计数器,用于判断是否所有目标都已击中
    private int scatterHitCount = 0;
    private int scatterTotalTargets = 0;
    public BulletSkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
        : base(_skillConfig, _caster, _tagUseSkillAttack)
@@ -297,6 +301,14 @@
    //  散射
    private void ScatterShot(int index)
    {
        // 只在第一次发射时初始化散射计数器
        if (index == 0)
        {
            scatterHitCount = 0;
            // 总击中数 = 发射次数 × 目标数量
            scatterTotalTargets = skillConfig.ActiveFrames.Length * tagUseSkillAttack.HurtList.Length;
        }
        // 处理散射逻辑
        for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
        {
@@ -305,17 +317,22 @@
            if (target == null)
            {
                Debug.LogError("特效目标为空 target == null ObjId : " + hurt.ObjID);
                // 目标为空时减少对应发射次数的总目标数
                if (index == 0) scatterTotalTargets--;
                continue;
            }
            ScatterShot(target, hurt, index, i);
        }
    }
    private void ScatterShot(BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, int index, int order)
    private void ScatterShot(BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, int bulletIndex, int order)
    {
        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, index, (index, hitList) =>
        var tempOrder = order;
        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans,
            new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, bulletIndex, (index, hitList) =>
        {
            foreach (var hurt in hitList)
            {
@@ -336,17 +353,13 @@
            // 击中就销毁子弹
            caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
            if (isFinish)
                return;
            // 增加散射击中计数
            scatterHitCount++;
            //  多个子弹的最后一发
            if (index >= skillConfig.ActiveFrames.Length - 1)
            {
                //  多角色的最后一个角色
                if (order >= tagUseSkillAttack.HurtList.Length - 1)
            // 判断是否所有发射次数的所有目标都已击中
            if (scatterHitCount >= scatterTotalTargets)
                {
                    isFinish = true;
                }
            }
        });