yyl
2025-09-18 cb018a575005f873135fab3201d1bf6d408e2b6a
125 【战斗】战斗系统 技能表现修改
6个文件已修改
147 ■■■■■ 已修改文件
Main/Component/UI/Effect/BattleEffectPlayer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleConst.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Buff/BattleObjectBuffMgr.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/SkillBase.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -36,8 +36,6 @@
    public float speedRate = 1.5f;
    [Header("播放完毕立即回收")]
    public bool isReleaseImmediately = false;  //界面特效一般不需要自我销毁,跟随界面或者父对象销毁就行
@@ -377,7 +375,7 @@
    public string sortingLayer;
    public int sortingOrder;
    private RectTransform rectTrans;
    public RectTransform rectTrans;
    protected void OnSortingChanged(string _sortingLayer, int _sortingOrder)
    {
Main/System/Battle/BattleConst.cs
@@ -99,6 +99,14 @@
        }
    }
    public static int ActiveHeroActionSortingOrder
    {
        get
        {
            return ActiveHeroSortingOrder + 1;
        }
    }
    // 激活英雄的后特效
    public static int ActiveHeroBackSortingOrder
    {
Main/System/Battle/BattleObject/BattleObject.cs
@@ -40,8 +40,6 @@
    public TeamHero teamHero { get; protected set; }
    // public BuffMgr buffMgr;
    public MotionBase motionBase;
    public GameObject heroGo
@@ -111,6 +109,7 @@
    {
        motionBase.Run();
        heroInfoBar.Run();
        buffMgr.Run();
    }
    public virtual void Pause()
@@ -331,6 +330,8 @@
    {
        //  或许看看溶解特效? YYL TODO
        heroGo.SetActive(false);
        buffMgr.RemoveAllBuff();
    }
    public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData)
Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
@@ -61,6 +61,11 @@
    public void UpdateLayer()
    {
        for (int i = 0; i < effectPlayers.Count; i++)
        {
            effectPlayers[i].SetActive(isFront);
        }
        int order = isFront ? BattleConst.ActiveHeroSortingOrder : BattleConst.UnactiveHeroSortingOrder;
        SetSortingOrder(order);
    }
Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -6,11 +6,8 @@
public class BattleObjectBuffMgr
{
    // buffId, effectId, EffectPlayer
    private Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict = new Dictionary<uint, Dictionary<int, BattleEffectPlayer>>();
    private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
    //  buffId, buffdata
    private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
    private BattleObject battleObject;
@@ -25,17 +22,31 @@
    }
    //  增加buff
    public void AddBuff(HB428_tagSCBuffRefresh vNetData)
    public void Run()
    {
        // BuffBase buffBase = BuffFactory.CreateBuff(vNetData, battleObject);
        // if (null == buffBase)
        // {
        //     return;
        // }
        //  跟随BattleObject
        foreach (var kv in buffEffectDict)
        {
            // foreach (var kv2 in effectDict)
            {
                BattleEffectPlayer effectPlayer = kv.Value.Key;
                effectPlayer.transform.position = battleObject.heroRectTrans.position;
            }
        }
    }
        // buffBase.OnAdd();
    public void RemoveAllBuff()
    {
        foreach (var kv in buffEffectDict)
        {
            KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair = kv.Value;
            battleObject.battleField.battleEffectMgr.RemoveEffect(kv.Key, pair.Key);
        }
        buffEffectDict.Clear();
        buffDataDict.Clear();
        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
    }
    //  删除buff
@@ -50,18 +61,24 @@
        if (buffData != null)
        {
            Dictionary<int, BattleEffectPlayer> effectDict = null;
            SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
            if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
            if (null == skillConfig || skillConfig.BuffEffect <= 0)
            {
                SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
                if (null != skillConfig)
                return;
            }
            KeyValuePair<BattleEffectPlayer, HashSet<uint>> effectPair;
            if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out effectPair))
            {
                effectPair.Value.Remove(vNetData.BuffID);
                if (effectPair.Value.Count == 0)
                {
                    BattleEffectPlayer effectPlayer = null;
                    if (effectDict.TryGetValue(skillConfig.EffectId, out effectPlayer))
                    {
                        battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.EffectId, effectPlayer);
                    }
                    //  没有这个buff了
                    battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.BuffEffect, effectPair.Key);
                    buffEffectDict.Remove(skillConfig.BuffEffect);
                }
            }
        }
@@ -70,8 +87,17 @@
        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
    }
    //  刷新buff
    public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
    {
        SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
        if (null == skillConfig)
        {
            Debug.LogError("buff对应的技能不存在,skillId : " + vNetData.SkillID);
            return;
        }
        bool isNew = false;
        if (buffDataDict.ContainsKey(vNetData.BuffID))
        {
@@ -86,35 +112,31 @@
        if (isNew)
        {
            BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
            {
                SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
                if (null != skillConfig && skillConfig.EffectId > 0)
            {
                if (null != skillConfig && skillConfig.BuffEffect > 0)
                {
                    // Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict
                    Dictionary<int, BattleEffectPlayer> effectDict = null;
                    if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
                    //  已经存在相同的buff特效
                    if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair))
                    {
                        //  存在这个buffid的特效字典
                        if (effectDict.ContainsKey(skillConfig.EffectId))
                        {
                            Debug.LogError("已存在同样的buff特效 " + skillConfig.EffectId);
                        }
                        else
                        {
                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                            effectDict.Add(skillConfig.EffectId, effect);
                        }
                        pair.Value.Add(vNetData.BuffID);
                    }
                    else
                    {
                        effectDict = new Dictionary<int, BattleEffectPlayer>();
                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                        effectDict.Add(skillConfig.EffectId, effect);
                        buffEffectDict.Add(vNetData.BuffID, effectDict);
                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
                        HashSet<uint> buffIdSet = new HashSet<uint>();
                        buffIdSet.Add(vNetData.BuffID);
                        buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
                    }
                }
                battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
            });
            battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
        }
        else
        {
            //  已经存在的buff 刷新
            battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
        }
    }
}
Main/System/Battle/Skill/SkillBase.cs
@@ -376,10 +376,13 @@
            return;
        // 高亮所有目标
        List<BattleObject> highlightList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
        List<BattleObject> targetList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
        List<BattleObject> highlightList = new List<BattleObject>(targetList);
        highlightList.Add(caster);
        List<BattleObject> allList = battleField.battleObjMgr.allBattleObjDict.Values.ToList<BattleObject>();
        caster.heroInfoBar.SetActive(false);
        for (int i = 0; i < allList.Count; i++)
        {
@@ -387,6 +390,7 @@
            if (highlightList.Contains(bo))
            {
                bo.layerMgr.SetFront();
                bo.heroInfoBar.SetActive(true);
                bo.heroRectTrans.SetParent(battleField.battleRootNode.skillFrontNode, true);
            }
            else
@@ -394,7 +398,18 @@
                bo.layerMgr.SetBack();
                bo.heroRectTrans.SetParent(battleField.battleRootNode.skillBackNode, true);
            }
            if (targetList.Contains(bo))
            {
                bo.heroInfoBar.SetActive(true);
            }
            else
            {
                bo.heroInfoBar.SetActive(false);
            }
        }
        caster.layerMgr.SetSortingOrder(BattleConst.ActiveHeroActionSortingOrder);
        battleField.battleRootNode.skillMaskNode.SetActive(true);
@@ -635,9 +650,11 @@
                BattleObject bo = allList[i];
                bo.layerMgr.SetFront();
                bo.heroRectTrans.SetParent(battleField.GetTeamNode(bo.Camp, bo.teamHero.positionNum), true);
                bo.heroInfoBar.SetActive(true);
            }
            battleField.battleRootNode.skillMaskNode.SetActive(false);
            return true;