yyl
2026-02-09 5a4e34c8a85737c0fa5b5775122da31155cbaef3
Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -41,6 +41,8 @@
    private float m_Alpha = 1f;
    public float scaleFactor = 1f;//    长期为1,只在需要跟模型一起缩放的时候更改 值为teamHero.ModelScale
    public float Alpha
    {
        get
@@ -161,6 +163,8 @@
        //  有特效可能带spine又带unity特效的情况
        spineComp = gameObject.GetComponentInChildren<SkeletonAnimation>(true);
        if (effectConfig.effectPos != null && effectConfig.effectPos.Length >= 2)
        {
            rectTrans.anchoredPosition += new Vector2((isRedCamp ? 1f : -1f) * effectConfig.effectPos[0], effectConfig.effectPos[1]);
@@ -170,6 +174,7 @@
        {
            rectTrans.localScale *= effectConfig.effectScale;
        }
        spineComp.loop = effectConfig.isLoop != 0;
    }
@@ -223,9 +228,14 @@
            bool isHeroFront = funcIsHeroFront();
            int finalSortingOrder = isHeroFront ?
                (isEffectFront ? BattleConst.ActiveHeroActionSortingOrder + 1 : BattleConst.ActiveHeroBackSortingOrder) : (isEffectFront ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder);
            int baseSortingOrder = isHeroFront ? BattleConst.SkillMaskOrder : BattleConst.BattleBackgroundOrder - BattleConst.BattleFrontHeroEffect - 1;
            //  区分是否在特效前面 还要再区分是否在UI前面 isBindBone
            int dynamicOffset = isBindBone
                                ? BattleConst.BattleFrontHeroBehindUIEffect : (isEffectFront ? BattleConst.BattleFrontHeroEffect : BattleConst.BattleBehindHeroEffect);
            int finalSortingOrder = baseSortingOrder + dynamicOffset;
            blocker.SetSortingOrder(finalSortingOrder);
        }
@@ -378,6 +388,11 @@
        spineComp.Initialize(true);
        spineComp.timeScale = speedRate;
        if (scaleX != 0f && spineComp != null && spineComp.skeleton != null)
        {
            spineComp.skeleton.ScaleX = scaleX;
        }
        spineComp.skeleton.A = Alpha;
        spineAnimationState = spineComp.state;
@@ -395,10 +410,13 @@
        spineComp.timeScale = speedRate;
        spineComp.LateUpdate();
        Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
        spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
        SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
        // SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
    }
@@ -432,7 +450,7 @@
        }
        // 从特效预制体池获取特效
        pool = GameObjectPoolManager.Instance.RequestPool(effectPrefab);
        pool = GameObjectPoolManager.Instance.GetPool(effectPrefab);
        effectTarget = pool.Request();
        // 设置父节点和位置
        effectTarget.transform.SetParent(transform);
@@ -454,7 +472,7 @@
        blocker.onSortingChanged = OnSortingChanged;
        SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
        // SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
    }
@@ -535,7 +553,7 @@
    //  创建后的特效会自动隐藏 需要手动调用Play才能播放
    public static BattleEffectPlayer Create(int effectId, BattleField _battleField, Transform parent, bool isRedCamp)
    public static BattleEffectPlayer Create(int effectId, BattleField _battleField, Transform parent, bool isRedCamp, float _scaleRatio)
    {
        // 直接创建特效播放器,不使用对象池
        BattleEffectPlayer battleEffectPlayer = null;
@@ -547,6 +565,8 @@
        battleEffectPlayer.rectTrans = newGo.AddMissingComponent<RectTransform>();
        
        battleEffectPlayer.effectId = effectId;
        battleEffectPlayer.scaleFactor = _scaleRatio;
        // 设置阵营
        battleEffectPlayer.isRedCamp = isRedCamp;
@@ -662,17 +682,28 @@
        }
    }
    public void BindBone(SkeletonAnimation skeletonAnim, string v)
    public void BindBone(BattleObject battleObject, string v)
    {
        Bone bone = skeletonAnim.skeleton.FindBone(v);
        var skeletonAnim = battleObject?.GetSkeletonAnimation();
        if (skeletonAnim == null)
        {
            return;
        }
        Bone bone = skeletonAnim.skeleton.FindBone(v);
        isBindBone = false;
        followedBone = null;
        if (null == bone)
        {
             return;
        }
        rectTrans.localScale *= scaleFactor;
        isBindBone = true;
        followedBone = bone;
        ApplySortingOrder();
        BoneFollower boneFollower = gameObject.AddMissingComponent<BoneFollower>();
        boneFollower.boneName = v;
@@ -688,4 +719,18 @@
        boneFollower.Initialize();
        boneFollower.LateUpdate();
    }
    private float scaleX = 0f;
    public void SetScaleX(float v)
    {
        if (spineComp != null && spineComp.skeleton != null)
        {
            spineComp.skeleton.ScaleX = v;
        }
        else
        {
            scaleX = v;
        }
    }
}