yyl
2025-08-25 cec8b67d82c2c2c1662d55c818c4a46bcc0487db
Main/System/Battle/BattleEffectMgr.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BattleEffectMgr : MonoBehaviour
@@ -45,12 +46,14 @@
    {
        if (effectId <= 0)
        {
            BattleDebug.LogError("effect id <= 0");
            return null;
        }
        var effectCfg = EffectConfig.Get(effectId);
        if (null == effectCfg)
        {
            BattleDebug.LogError("effect config is null, effectId : " + effectId);
            return null;
        }
@@ -59,12 +62,16 @@
            effectDict[effectId] = new List<BattleEffectPlayer>();
        }
        BattleEffectPlayer effectPlayer = BattleEffectPlayer.Create(effectId, parent);
        BattleEffectPlayer effectPlayer = BattleEffectPlayer.Create(effectId, battleField.battleRootNode.transform);
        effectPlayer.transform.position = parent.position;
        float effectScale = parent.transform.localScale.x;
        effectPlayer.transform.localScale *= effectScale;
        effectPlayer.onDestroy += OnEffectDestroy;
        if (effectPlayer != null)
        {
            effectDict[effectId].Add(effectPlayer);
        }
        effectPlayer.Play(true);
        return effectPlayer;
    }
@@ -80,7 +87,7 @@
        }
        else
        {
            Debug.LogError("could not find effect in list, effectid : " + effectId);
            BattleDebug.LogError("could not find effect in list, effectid : " + effectId);
        }
    }
@@ -98,16 +105,25 @@
    public void HaveRest()
    {
        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
        List<int> fKeys = effectDict.Keys.ToList();
        for (int i = 0; i < fKeys.Count; i++)
        {
            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
            List<BattleEffectPlayer> effectPlayers = effectDict[fKeys[i]];
            while (effectPlayers.Count > 0)
            {
                var effectPlayer = effectPlayers[0];
                if (effectPlayer != null)
                {
                    GameObject.DestroyImmediate(effectPlayer.gameObject);
                }
                else
                {
                    effectPlayers.RemoveAt(0);
                }
            }
        }
        effectDict.Clear();
    }