yyl
2026-02-09 5a4e34c8a85737c0fa5b5775122da31155cbaef3
Main/Component/UI/Effect/EffectPlayer.cs
@@ -24,6 +24,7 @@
        {
            if (value != m_EffectID)
            {
                Stop();
                isInit = false;
                m_EffectID = value;
            }
@@ -34,7 +35,7 @@
    public EffectConfig effectConfig;
    public float speedRate = 1f;
    public float speedRate = 1f;    //初始化的时候用 修改使用SetSpeed
    [Header("是否循环播放spine特效")]
    public bool isPlaySpineLoop = false;
@@ -60,7 +61,11 @@
    protected EffectPenetrationBlocker blocker = null;
    protected bool isInit = false;
    protected bool isPlaying = false;
    public bool isPlaying
    {
        get;
        protected set;
    }
    protected List<ParticleSystem> particleList = new List<ParticleSystem>();
@@ -77,8 +82,12 @@
    protected virtual void OnEnable()
    {
        if (isPlayOnEnable)
        if (isPlayOnEnable && playDelayTime != 0)
        {
            PlayAsync(false).Forget();
        }
        else if (isPlayOnEnable)
        {
            Play(false);
        }
@@ -220,7 +229,7 @@
            PlayerEffect();
        }
    
        SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
    }
@@ -240,7 +249,17 @@
    //     return;
    // }
   //越大越快
   public void SetSpeed(float speed)
    {
        speedRate = speed;
        if (spineAnimationState == null)
        {
            Debug.LogError("spineAnimationState is null 可以先调用play");
            return;
        }
      spineAnimationState.TimeScale = speed;
   }
    protected void PlaySpineEffect(bool closePMA = false)
    {
@@ -255,10 +274,10 @@
        {
            //LoadAsset 已经有缓存SkeletonDataAsset
            spineComp.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
            spineComp.MeshGenerator.settings.pmaVertexColors = !closePMA;   //为true时会有部分特效不显示 如主界面装备特效
            //为true时会有部分特效不显示 如满级经验条;改成伽马后部分特效正常,还有部分依然要改此设置
            spineComp.MeshGenerator.settings.pmaVertexColors = !closePMA;
            spineComp.raycastTarget = false;
            spineComp.Initialize(true);
            spineComp.timeScale = speedRate;
            // 检查动画是否有相加模式
            // bool hasAdditiveBlend = CheckForAdditiveBlend(spineComp.Skeleton);
            // if (hasAdditiveBlend)
@@ -272,6 +291,7 @@
            spineComp.material = ResManager.Instance.LoadAsset<Material>("Materials", "SkeletonGraphicDefault-Straight");
            spineAnimationState = spineComp.AnimationState;
            spineAnimationState.TimeScale = speedRate;
            spineAnimationState.Data.DefaultMix = 0f;
            spineAnimationState.Complete -= OnSpineAnimationComplete;
            spineAnimationState.Complete += OnSpineAnimationComplete;
@@ -279,6 +299,7 @@
        spineComp.enabled = true;
        PlayerTheSpineAnim();
        SoundPlayer.Instance.PlayUIAudioDelay(effectConfig.audio).Forget();
    }
        // 播放指定动画
@@ -341,7 +362,7 @@
        }
        // 从特效预制体池获取特效
        pool = GameObjectPoolManager.Instance.RequestPool(effectPrefab);
        pool = GameObjectPoolManager.Instance.GetPool(effectPrefab);
        effectTarget = pool.Request();
        // 设置父节点和位置
        effectTarget.transform.SetParent(transform);
@@ -369,6 +390,7 @@
        {
            blocker.SetParentCanvas(canvas);
        }
        SoundPlayer.Instance.PlayUIAudioDelay(effectConfig.audio).Forget();
    }
    public async UniTask PlayAsync(bool showLog = true, bool closePMA = false)
@@ -410,10 +432,11 @@
            spineComp.enabled = false;
            isPlaying = false;
            onComplete?.Invoke();
            if (isReleaseImmediately)
            {
                Release();
            }
            // TODO 会报错暂时注释
            // if (isReleaseImmediately)
            // {
            //     Release();
            // }
        }
    }