yyl
2026-04-03 99a11d2bb19d74f6cc8584ac16838062af4fb301
Main/System/Battle/BattleEffectMgr.cs
@@ -10,6 +10,9 @@
    private Dictionary<int, List<BattleEffectPlayer>> effectDict = new Dictionary<int, List<BattleEffectPlayer>>();
    // 缓存Run()的临时列表,避免每帧分配
    private List<BattleEffectPlayer> _runList = new List<BattleEffectPlayer>();
    public void Init(BattleField _battleField)
    {
        Reload(_battleField);
@@ -23,16 +26,16 @@
    public void Run()
    {
        List<BattleEffectPlayer> runList = new List<BattleEffectPlayer>();
        _runList.Clear();
        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
        {
            runList.AddRange(kvPair.Value);
            _runList.AddRange(kvPair.Value);
        }
        for (int i = runList.Count - 1; i >= 0; i--)
        for (int i = _runList.Count - 1; i >= 0; i--)
        {
            BattleEffectPlayer effectPlayer = runList[i];
            BattleEffectPlayer effectPlayer = _runList[i];
            if (effectPlayer != null)
            {
                effectPlayer.Run();
@@ -169,11 +172,13 @@
    public void Release()
    {
        List<int> fKeys = effectDict.Keys.ToList();
        for (int i = 0; i < fKeys.Count; i++)
        // 必须先快照key列表,因为DestroyImmediate会同步触发OnEffectDestroy修改effectDict
        _runList.Clear();
        var keys = new List<int>(effectDict.Keys);
        for (int k = 0; k < keys.Count; k++)
        {
            List<BattleEffectPlayer> effectPlayers = effectDict[fKeys[i]];
            if (!effectDict.TryGetValue(keys[k], out var effectPlayers))
                continue;
            while (effectPlayers.Count > 0)
            {
                var effectPlayer = effectPlayers[0];