From 99a11d2bb19d74f6cc8584ac16838062af4fb301 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 03 四月 2026 11:24:07 +0800
Subject: [PATCH] webgl 优化

---
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs |   39 +++++++++++++++++++++++++++++----------
 1 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index 20013c0..63faa2d 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/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;
     }
 

--
Gitblit v1.8.0