yyl
2026-04-03 99a11d2bb19d74f6cc8584ac16838062af4fb301
Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -27,6 +27,12 @@
        { BattleConst.PassiveSkillLimitGroup, false },
    };
    // 缓存Run()清理用的列表,避免每帧分配
    private List<int> _removeEffectCache = new List<int>();
    // 缓存OnBuffChanged回调用的列表,避免每次分配
    private List<HB428_tagSCBuffRefresh> _buffValueCache = new List<HB428_tagSCBuffRefresh>();
    public void Init(BattleObject _battleObject)
    {
        battleObject = _battleObject;
@@ -48,7 +54,7 @@
    public void Run()
    {
        List<int> removeEffectList = new List<int>();
        _removeEffectCache.Clear();
        //  跟随BattleObject
        foreach (var kv in buffEffectDict)
        {
@@ -58,7 +64,7 @@
                if (effectPlayer.isBindBone)
                {
                    effectPlayer.FollowBoneXY();
                    return;
                    continue;
                }
                int[] effectPos = effectPlayer.effectConfig.effectPos;
                effectPlayer.transform.position = battleObject.GetPosition();
@@ -69,11 +75,11 @@
            }
            else
            {
                removeEffectList.Add(kv.Key);
                _removeEffectCache.Add(kv.Key);
            }
        }
        
        foreach (var effectId in removeEffectList)
        foreach (var effectId in _removeEffectCache)
        {
            buffEffectDict.Remove(effectId);
        }
@@ -234,8 +240,15 @@
            return;
        }
        var buffList = vNetDataList.Where(buff => buff != null && buff.IsAdd != 0).ToList();
        var refreshList = vNetDataList.Where(buff => buff != null && buff.IsAdd == 0).ToList();
        var buffList = new List<HB428_tagSCBuffRefresh>();
        var refreshList = new List<HB428_tagSCBuffRefresh>();
        for (int i = 0; i < vNetDataList.Count; i++)
        {
            var buff = vNetDataList[i];
            if (buff == null) continue;
            if (buff.IsAdd != 0) buffList.Add(buff);
            else refreshList.Add(buff);
        }
        // 处理需要播放动画的buff (IsAdd != 0)
        if (buffList.Count > 0)
@@ -345,7 +358,10 @@
        UpdateControlState();
        battleObject.RefreshBuff(buffDataDict.Values.ToList());
        _buffValueCache.Clear();
        foreach (var kv in buffDataDict)
            _buffValueCache.Add(kv.Value);
        battleObject.RefreshBuff(_buffValueCache);
        onBuffChanged?.Invoke();
        // bool isUnderControl = false;
@@ -415,11 +431,14 @@
    public List<HB428_tagSCBuffRefresh> GetBuffIconList()
    {
        List<HB428_tagSCBuffRefresh> buffList = buffDataDict.Values.Where(buff =>
        List<HB428_tagSCBuffRefresh> buffList = new List<HB428_tagSCBuffRefresh>();
        foreach (var kv in buffDataDict)
        {
            var buff = kv.Value;
            SkillConfig skillConfig = SkillConfig.Get((int)buff.SkillID);
            return skillConfig != null;
        }).ToList();
            if (skillConfig != null)
                buffList.Add(buff);
        }
        return buffList;
    }