yyl
2026-03-04 bc1cb6da854cb2e9144f10ed55330a537ecdca16
Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -6,6 +6,7 @@
using Spine;
using UnityEngine.UI;
using System.Linq;
using Cysharp.Threading.Tasks;
// 特效播放器,对象池管理:unity特效和spine特效都是做好的预制体
// unity特效预制体是特效师在制作的时候生成的,unity特效必须挂载设置播放时长脚本 EffectTime
@@ -124,7 +125,7 @@
    }
    protected void InitComponent(bool showLog = true)
    protected async UniTask InitComponent(bool showLog = true)
    {
        Clear();
        if (effectId <= 0)
@@ -156,7 +157,7 @@
        //  初始化spine组件
        if (effectConfig != null && effectConfig.isSpine != 0)
        {
            GameObject spineContainerPrefab = ResManager.Instance.LoadAsset<GameObject>("UIComp", "SpineAnimContainer");
            GameObject spineContainerPrefab = await ResManager.Instance.LoadAssetAsync<GameObject>("UIComp", "SpineAnimContainer");
            spineContainer = GameObject.Instantiate(spineContainerPrefab, transform, true);
            spineContainer.transform.localPosition = Vector3.zero;
        }
@@ -266,11 +267,11 @@
        }
    }
    public virtual void Play(bool showLog = true)
    public virtual async void Play(bool showLog = true)
    {
        if (!isInit)
        {
            InitComponent(showLog);
            await InitComponent(showLog);
            isInit = true;
        }
        else
@@ -349,19 +350,19 @@
    {
        if (effectConfig.isSpine != 0)
        {
            PlaySpineEffect();
            PlaySpineEffect().Forget();
        }
        else
        {
            PlayUnityEffect();
            PlayUnityEffect().Forget();
        }
        battleField?.soundManager.PlayEffectSound(effectConfig.audio);
        battleField?.soundManager.PlayEffectSound(effectConfig.audio).Forget();
        OnAlphaChanged();
    }
    protected void PlaySpineEffect()
    protected async UniTask PlaySpineEffect()
    {
        if (spineComp == null)
        {
@@ -371,7 +372,7 @@
        // ===== 简化:直接从缓存获取,缓存内部会自动加载 =====
        string directory = "UIEffect/" + effectConfig.packageName;
        SkeletonDataAsset skeletonDataAsset = BattleResManager.Instance.GetSpineResource(
        SkeletonDataAsset skeletonDataAsset = await BattleResManager.Instance.GetSpineResource(
            directory, 
            effectConfig.fxName,
            battleField?.guid
@@ -380,6 +381,11 @@
        if (skeletonDataAsset == null)
        {
            Debug.LogError($"BattleEffectPlayer: Failed to load effect spine {effectConfig.fxName}");
            return;
        }
        if (this == null || spineComp == null)
        {
            return;
        }
        // ================================
@@ -433,11 +439,11 @@
        return false;
    }
    protected void PlayUnityEffect()
    protected async UniTask PlayUnityEffect()
    {
        //  这里是纯unity特效的逻辑
        var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
        var effectPrefab = await ResManager.Instance.LoadAssetAsync<GameObject>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
        if (effectPrefab == null)
        {
            Debug.LogError($"加载UI特效失败: {effectConfig.packageName}");