From 6a10188f3eddc740b9b8b1e7eefb0e2fdb3850e3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 15 九月 2025 19:41:19 +0800
Subject: [PATCH] 125 【战斗】战斗系统 角色层级&战斗速度调整

---
 Main/System/Battle/SkillEffect/NormalSkillEffect.cs               |    6 
 Main/System/Battle/BattleField/BattleRootNode.cs                  |    6 
 Main/System/Battle/Motion/MotionBase.cs                           |    7 
 Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs.meta      |   11 +
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs                    |    4 
 Main/System/Battle/SkillEffect/SkillEffect.cs                     |    6 
 Main/System/Battle/SkillEffect/BulletSkillEffect.cs               |    6 
 Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs           |   67 ++++++++
 Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs |    2 
 Main/System/Battle/BattleField/BattleField.cs                     |   38 +++-
 Main/Component/UI/Common/RendererAdjuster.cs                      |   33 ++-
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                   |   11 +
 Main/System/Battle/BattleTweenMgr.cs                              |   14 +
 Main/System/Battle/BattleObject/BattleObject.cs                   |   38 +---
 Main/System/Battle/Skill/SkillBase.cs                             |   41 ++++-
 Main/System/Battle/BattleObject/BattleObjMgr.cs                   |    9 +
 Main/System/Battle/BattleEffectMgr.cs                             |   29 +++
 Main/Component/UI/Effect/BattleEffectPlayer.cs                    |   99 ++++++------
 18 files changed, 305 insertions(+), 122 deletions(-)

diff --git a/Main/Component/UI/Common/RendererAdjuster.cs b/Main/Component/UI/Common/RendererAdjuster.cs
index 1a1977c..fe9d096 100644
--- a/Main/Component/UI/Common/RendererAdjuster.cs
+++ b/Main/Component/UI/Common/RendererAdjuster.cs
@@ -5,7 +5,6 @@
 
 public class RendererAdjuster : MonoBehaviour
 {
-    public int renderQueue = 3000;
 
     public int sortingOrder = 0;
 
@@ -13,7 +12,14 @@
 
     public List<Renderer> renderers = new List<Renderer>();
 
+    protected Canvas canvas;
+
     public Action<string, int> onSortingChanged;
+
+    protected void Awake()
+    {
+        UpdateComps();
+    }
 
     public void SetSortingOrder(int sortingOrder)
     {
@@ -22,21 +28,12 @@
         UpdateSortingOrder();
     }
 
-    public void Awake()
-    {
-        UpdateComps();
-    }
-
-    protected void OnEnable()
-    {
-        UpdateComps();
-        UpdateSortingOrder();
-    }
-
     protected void UpdateComps()
     {
         renderers.Clear();
         renderers.AddRange(gameObject.GetComponentsInChildren<Renderer>(true));
+
+        canvas = GetComponent<Canvas>();
     }
 
     public void UpdateSortingOrder()
@@ -44,6 +41,7 @@
         // 灏嗙壒鏁堢殑鎺掑簭椤哄簭璁剧疆涓篊anvas鎺掑簭椤哄簭鍔犱笂鍋忕Щ閲�
         ApplySortingSettings(sortingOrder, customSortingLayer);
     }
+    
 
     private void ApplySortingSettings(int sortingOrder, string sortingLayer)
     {
@@ -52,8 +50,6 @@
             if (renderer != null)
             {
                 renderer.sortingOrder = sortingOrder;
-                renderer.material.renderQueue = renderQueue; // 璁剧疆娓叉煋闃熷垪
-                // renderer.material.renderQueue = overlayRQ;
                 if (!string.IsNullOrEmpty(sortingLayer))
                 {
                     renderer.sortingLayerName = sortingLayer;
@@ -61,6 +57,15 @@
             }
         }
 
+        if (null != canvas)
+        {
+            canvas.sortingOrder = sortingOrder;
+            if (!string.IsNullOrEmpty(sortingLayer))
+            {
+                canvas.sortingLayerName = sortingLayer;
+            }
+        }
+
         onSortingChanged?.Invoke(sortingLayer, sortingOrder);
     }
 }
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 3be7521..f9f4f4e 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -33,7 +33,7 @@
     public bool isRedCamp = true;
     public EffectConfig effectConfig;
 
-    public float speedRate = 1f;
+    public float speedRate = 1.5f;
 
 
 
@@ -43,11 +43,9 @@
 
     public Action<BattleEffectPlayer> onDestroy;
 
-    [HideInInspector] public Canvas canvas = null;
-
     [HideInInspector] public GameObject effectTarget = null;
 
-    protected EffectPenetrationBlocker blocker = null;
+    protected RendererAdjuster blocker = null;
 
     protected bool isInit = false;
 
@@ -61,6 +59,8 @@
 
     protected SkeletonAnimation spineComp;
     protected Spine.AnimationState spineAnimationState;
+
+    protected int heroSetedSortingOrder;
 
     public GameObjectPoolManager.GameObjectPool pool;
 
@@ -157,24 +157,43 @@
         onComplete?.Invoke();
     }
 
-    public virtual void Play(bool showLog = true)
+    public void SetSortingOrder(int _heroSetedSortingOrder)
     {
+        heroSetedSortingOrder = _heroSetedSortingOrder;
 
+        int so = heroSetedSortingOrder;
 
-        if (!isInit)
+        if (null != blocker && effectConfig != null)
+        {
+            if (BattleConst.UnactiveHeroSortingOrder == heroSetedSortingOrder)
             {
-                InitComponent(showLog);
-                isInit = true;
+                so = effectConfig.frontBack == 1 ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder;
             }
             else
             {
-                //閬垮厤閲嶅鍒涘缓
-                if (!this.gameObject.activeSelf)
-                {
-                    this.gameObject.SetActive(true);
-                }
-                return;
+                so = effectConfig.frontBack == 1 ? BattleConst.ActiveHeroFrontSortingOrder : BattleConst.ActiveHeroBackSortingOrder;
             }
+
+            blocker.SetSortingOrder(so);
+        }
+    }
+
+    public virtual void Play(bool showLog = true)
+    {
+        if (!isInit)
+        {
+            InitComponent(showLog);
+            isInit = true;
+        }
+        else
+        {
+            //閬垮厤閲嶅鍒涘缓
+            if (!this.gameObject.activeSelf)
+            {
+                this.gameObject.SetActive(true);
+            }
+            return;
+        }
 
         if (EffectMgr.IsNotShowBySetting(effectId))
         {
@@ -195,12 +214,12 @@
 
         if (effectConfig.autoDestroy != 0)
         {
-            GameObject.Destroy(gameObject, effectConfig.destroyDelay);
+            GameObject.Destroy(gameObject, effectConfig.destroyDelay / speedRate);
         }
 
 
         PlayEffect();
-        
+
 
     }
 
@@ -250,22 +269,15 @@
         spineAnimationState.Complete -= OnSpineAnimationComplete;
         spineAnimationState.Complete += OnSpineAnimationComplete;
 
-
-        if (null == canvas)
-            canvas = GetComponentInParent<Canvas>();
-
         // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
-        blocker = spineComp.AddMissingComponent<EffectPenetrationBlocker>();
+        blocker = spineComp.AddMissingComponent<RendererAdjuster>();
 
         blocker.onSortingChanged = OnSortingChanged;
 
-        //  濡傛灉娌℃湁canvas鐨勮瘽 姝e父鏄洜涓轰笉鍦˙attleWin涓嬮潰鐨勮妭鐐� 鎰忔�濆氨鏄綋鍓嶆病鏈夋樉绀� 绛夊埌鍒囧洖鎴樻枟鐨勬椂鍊欏啀閫氳繃BattleField.UpdateCanvas鏉ユ洿鏂�
-        if (canvas != null)
-        {
-            blocker.SetParentCanvas(canvas);
-        }
-
         spineComp.enabled = true;
+
+        spineComp.timeScale = speedRate;
+        spineAnimationState.TimeScale = speedRate;
 
         Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
         spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
@@ -320,19 +332,11 @@
 
         OnUnityAnimationComplete();
 
-        if (null == canvas)
-            canvas = GetComponentInParent<Canvas>();
 
         // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
-        blocker = effectTarget.AddMissingComponent<EffectPenetrationBlocker>();
+        blocker = effectTarget.AddMissingComponent<RendererAdjuster>();
 
         blocker.onSortingChanged = OnSortingChanged;
-
-        //  濡傛灉娌℃湁canvas鐨勮瘽 姝e父鏄洜涓轰笉鍦˙attleWin涓嬮潰鐨勮妭鐐� 鎰忔�濆氨鏄綋鍓嶆病鏈夋樉绀� 绛夊埌鍒囧洖鎴樻枟鐨勬椂鍊欏啀閫氳繃BattleField.UpdateCanvas鏉ユ洿鏂�
-        if (canvas != null)
-        {
-            blocker.SetParentCanvas(canvas);
-        }
 
         SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
 
@@ -526,21 +530,18 @@
         return true;
     }
 
-    /// <summary>
-    /// 璁剧疆閬僵锛堟敮鎸丷ectMask2D銆丮ask銆丼moothMask绛夛級
-    /// </summary>
-    public void SetMask(RectTransform maskArea = null)
+    public void SetSpeedRatio(float ratio)
     {
-        if (effectTarget == null || blocker == null)
-            return;
-
-        // 浼樺厛浣跨敤浼犲叆鐨刴askArea
-        if (maskArea != null)
+        speedRate = ratio;
+        if (spineComp != null)
         {
-            blocker.PerformMask(maskArea);
-            return;
+            spineComp.timeScale = speedRate;
+        }
+
+        // Animator鍔ㄧ敾
+        foreach (var animator in animatorList)
+        {
+            animator.speed = speedRate;
         }
     }
-
-
 }
diff --git a/Main/System/Battle/BattleEffectMgr.cs b/Main/System/Battle/BattleEffectMgr.cs
index b9419a2..4d8f83f 100644
--- a/Main/System/Battle/BattleEffectMgr.cs
+++ b/Main/System/Battle/BattleEffectMgr.cs
@@ -43,7 +43,7 @@
         }
     }
 
-    public BattleEffectPlayer PlayEffect(int ObjID, int effectId, Transform parent, BattleCamp camp)
+    public BattleEffectPlayer PlayEffect(BattleObject layerDepender, int effectId, Transform parent, BattleCamp camp)
     {
         if (effectId <= 0)
         {
@@ -70,16 +70,30 @@
 
         effectPlayer.transform.position = parent.position;
         
-        effectPlayer.onDestroy += OnEffectDestroy;
+
+        BattleObject temp = layerDepender;
+        effectPlayer.onDestroy += (efPlayer) =>
+        {
+            OnEffectDestroy(efPlayer);
+            temp.layerMgr.RemoveEffect(efPlayer);
+        };
+
         if (effectPlayer != null)
         {
             effectDict[effectId].Add(effectPlayer);
         }
         effectPlayer.Play(true);
+
+        effectPlayer.SetSpeedRatio(battleField.speedRatio);
         
         var effectScale = effectPlayer.transform.localScale;
         effectScale.x *= isRedCamp ? 1 : -1;
         effectPlayer.transform.localScale = effectScale;
+
+        if (null != layerDepender)
+        {
+            layerDepender.layerMgr.AddEffect(effectPlayer);
+        }
 
         return effectPlayer;
     }
@@ -140,4 +154,15 @@
 
         effectDict.Clear();
     }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        foreach (var kvPair in effectDict)
+        {
+            foreach (var effectPlayer in kvPair.Value)
+            {
+                effectPlayer.SetSpeedRatio(ratio);
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index b4dba55..4ec0e1b 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -24,6 +24,8 @@
 
     public int FuncLineID = 0;
 
+    public float speedRatio = 1.1f;
+
     public JsonData extendData;
 
     public bool IsBattleFinish
@@ -86,7 +88,7 @@
         battleTweenMgr = new BattleTweenMgr();
         recordPlayer = new RecordPlayer();
 
-
+        
     }
 
     public virtual void Init(int _MapID, int _FuncLineID, JsonData _extendData,
@@ -104,7 +106,7 @@
         battleEffectMgr.Init(this);
         battleTweenMgr.Init(this);
         recordPlayer.Init(this);
-        
+
         if (blueTeamList == null)
         {
             battleObjMgr.Init(this, redTeamList[redTeamIndex], null);
@@ -115,7 +117,29 @@
             battleObjMgr.Init(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
         }
 
-        battleRootNode.SetBackground(ResManager.Instance.LoadAsset<Texture>("Texture/FullScreenBg", "battlebg1"));
+        battleRootNode.SetBackground(ResManager.Instance.LoadAsset<Texture>("Texture/FullScreenBg", "mainui_img_277"));
+
+        SetBattleStartState();
+        SetSpeedRatio(speedRatio);
+    }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        speedRatio = ratio;
+        battleObjMgr.SetSpeedRatio(ratio);
+        recordPlayer.SetSpeedRatio(ratio);
+        battleEffectMgr.SetSpeedRatio(ratio);
+        battleTweenMgr.SetSpeedRatio(ratio);
+    }
+
+    protected virtual void SetBattleStartState()
+    {
+        foreach (var obj in battleObjMgr.allBattleObjDict.Values)
+        {
+            obj.layerMgr.SetFront();
+        }
+
+        battleRootNode.skillMaskNode.SetActive(false);
     }
 
     //  鍦≧un涔嬪墠瑕佽缃畬姣� 瑕佸垱寤篈gent
@@ -363,14 +387,10 @@
 
     public void UpdateCanvas(Canvas canvas)
     {
-        EffectPenetrationBlocker[] blockers = battleRootNode.GetComponentsInChildren<EffectPenetrationBlocker>(true);
 
-        if (null != blockers)
+        foreach (var obj in battleObjMgr.allBattleObjDict.Values)
         {
-            foreach (var blocker in blockers)
-            {
-                blocker.SetParentCanvas(canvas);
-            }
+            obj.layerMgr.UpdateLayer();
         }
 
         // RendererAdjuster[] adjusters = battleRootNode.GetComponentsInChildren<RendererAdjuster>(true);
diff --git a/Main/System/Battle/BattleField/BattleRootNode.cs b/Main/System/Battle/BattleField/BattleRootNode.cs
index 12f880b..128b941 100644
--- a/Main/System/Battle/BattleField/BattleRootNode.cs
+++ b/Main/System/Battle/BattleField/BattleRootNode.cs
@@ -49,4 +49,10 @@
 			// imgBackground.SetNativeSize();
 		}
 	}
+
+	public Transform skillBackNode;
+
+	public Transform skillFrontNode;
+
+	public GameObject skillMaskNode;
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
index 7a0c033..449150f 100644
--- a/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
@@ -6,7 +6,7 @@
 	private bool isRun = false;
 
 	public DodgeFinishAction(BattleField _battleField, BattleObject _dodgeObj)
-		: base(RecordActionType.DodgeFinish, _battleField, null)
+		: base(RecordActionType.DodgeFinish, _battleField, _dodgeObj)
 	{
 
 	}
diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index a6f0e39..446cc62 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -49,6 +49,7 @@
                 battleObj.heroGo.SetActive(active);
                 allBattleObjDict.Add(battleObj.ObjID, battleObj);
                 campDict.Add(teamHero.positionNum, battleObj);
+                battleObj.SetSpeedRatio(battleField.speedRatio);
             }
         }
     }
@@ -240,6 +241,14 @@
         }
     }
 
+    public void SetSpeedRatio(float ratio)
+    {
+        foreach (var obj in allBattleObjDict.Values)
+        {
+            obj.SetSpeedRatio(ratio);
+        }
+    }
+
 #if UNITY_EDITOR_STOP_USING
     public void ReviveAll()
     {
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index d086b64..ecef462 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -32,6 +32,8 @@
 
     public BattleObjectBuffMgr buffMgr;
 
+    public BattleObjectLayerMgr layerMgr;
+
     public int ObjID { get; set; }
 
     public BattleCamp Camp { get; protected set; }
@@ -65,8 +67,6 @@
         }
     }
 
-    public int sortingOrder = 0;
-
     protected Action onDeathAnimationComplete;
 
     protected Renderer[] renderers;
@@ -89,6 +89,9 @@
         buffMgr = new BattleObjectBuffMgr();
         buffMgr.Init(this);
 
+        layerMgr = new BattleObjectLayerMgr();
+        layerMgr.Init(this);
+
         renderers = heroGo.GetComponentsInChildren<Renderer>(true);
 
         heroInfoBar = heroGo.GetComponentInChildren<BattleHeroInfoBar>(true);
@@ -100,7 +103,7 @@
         heroInfoBar.transform.localScale = heroInfoBarScale;
 
         heroInfoBar.SetActive(true);
-        SetToFront();
+        SetFront();
     }
 
 
@@ -389,7 +392,7 @@
         heroRectTrans.anchoredPosition = Vector2.zero;
 
         heroInfoBar.SetActive(false);
-        SetToFront();
+        SetFront();
     }
 
     public void PushDropItems(BattleDrops _battleDrops)
@@ -411,34 +414,19 @@
         battleDrops = null;
     }
 
-    public void SetToBack()
+    public void SetBack()
     {
-        sortingOrder = BattleConst.UnactiveHeroSortingOrder;
-        UpdateSortingOrder();
+        layerMgr.SetBack();
     }
 
-    public void SetToFront()
+    public void SetFront()
     {
-        sortingOrder = BattleConst.ActiveHeroSortingOrder;
-        UpdateSortingOrder();
+        layerMgr.SetFront();
     }
 
-    private void UpdateSortingOrder()
+    public void SetSpeedRatio(float ratio)
     {
-        if (null == renderers) return;
-
-        foreach (var renderer in renderers)
-        {
-            if (renderer != null)
-            {
-                renderer.sortingOrder = sortingOrder;
-            }
-        }
-    }
-
-    public int GetSortingOrder()
-    {
-        return sortingOrder;
+        motionBase.SetSpeedRatio(ratio);
     }
 
 
diff --git a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
new file mode 100644
index 0000000..08a5bcf
--- /dev/null
+++ b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
@@ -0,0 +1,67 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+public class BattleObjectLayerMgr
+{
+    public BattleObject battleObj;
+
+    public RendererAdjuster rendererAdjuster;
+
+    private List<BattleEffectPlayer> effectPlayers = new List<BattleEffectPlayer>();
+
+    private bool isFront = true;
+
+    public BattleObjectLayerMgr()
+    {
+
+    }
+
+    public void Init(BattleObject battleObj)
+    {
+        this.battleObj = battleObj;
+        rendererAdjuster = battleObj.heroGo.AddMissingComponent<RendererAdjuster>();
+    }
+
+    public void SetSortingOrder(int sortingOrder)
+    {
+        if (rendererAdjuster != null)
+        {
+            rendererAdjuster.SetSortingOrder(sortingOrder);
+        }
+    }
+
+    public void AddEffect(BattleEffectPlayer effectPlayer)
+    {
+        if (effectPlayer != null && !effectPlayers.Contains(effectPlayer))
+        {
+            effectPlayers.Add(effectPlayer);
+            effectPlayer.SetSortingOrder(rendererAdjuster.sortingOrder);
+        }
+    }
+
+    public void RemoveEffect(BattleEffectPlayer effectPlayer)
+    {
+        if (effectPlayers.Contains(effectPlayer))
+        {
+            effectPlayers.Remove(effectPlayer);
+        }
+    }
+
+    public void SetFront()
+    {
+        isFront = true;
+        UpdateLayer();
+    }
+
+    public void SetBack()
+    {
+        isFront = false;
+        UpdateLayer();
+    }
+
+    public void UpdateLayer()
+    {
+        int order = isFront ? BattleConst.ActiveHeroSortingOrder : BattleConst.UnactiveHeroSortingOrder;
+        SetSortingOrder(order);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs.meta b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs.meta
new file mode 100644
index 0000000..0ecf08a
--- /dev/null
+++ b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9ccc1a52c3950a947a9159df13b88948
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleTweenMgr.cs b/Main/System/Battle/BattleTweenMgr.cs
index caebc16..2e72688 100644
--- a/Main/System/Battle/BattleTweenMgr.cs
+++ b/Main/System/Battle/BattleTweenMgr.cs
@@ -7,6 +7,8 @@
 {
     private BattleField battleField;
 
+    private float speedRatio => battleField.speedRatio;
+
     private List<Tween> tweenList = new List<Tween>();
 
     public void Init(BattleField _battleField)
@@ -45,6 +47,7 @@
         }
 
         tweenList.Add(tween);
+        tween.timeScale = speedRatio;
         tween.onComplete += () =>
         { 
             tweenList.Remove(tween);
@@ -85,4 +88,15 @@
         }
         tweenList.Clear();
     }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        foreach (var tween in tweenList)
+        {
+            if (tween != null && !tween.IsComplete())
+            {
+                tween.timeScale = speedRatio;
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index 8355597..9704be3 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -101,14 +101,14 @@
                         }
                         else
                         {
-                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject.ObjID, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
+                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                             effectDict.Add(skillConfig.EffectId, effect);
                         }
                     }
                     else
                     {
                         effectDict = new Dictionary<int, BattleEffectPlayer>();
-                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject.ObjID, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
+                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
                         effectDict.Add(skillConfig.EffectId, effect);
                         buffEffectDict.Add(vNetData.BuffID, effectDict);
                     }
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 40d4d06..7883bf6 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -393,6 +393,13 @@
         PlayAnimation(MotionName.idle, true);
     }
 
+    public void SetSpeedRatio(float ratio)
+    {
+        MotionTimeScale = ratio;
+        spineAnimationState.TimeScale = ratio;
+        skeletonGraphic.timeScale = ratio;
+    }
+
     #endregion
 
 }
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index b0dc553..aff4442 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -13,7 +13,9 @@
 
     private bool isWaitingNextAction = false;
     private float waitTimer = 0f;
-    private const float waitInterval = 0f;
+    private const float waitInterval = 0.2f;
+
+    private float speedRatio = 1.5f;
 
     public void Init(BattleField _battleField)
     {
@@ -96,7 +98,7 @@
         // 绛夊緟涓嬩竴涓猘ction
         if (isWaitingNextAction)
         {
-            waitTimer += Time.deltaTime;
+            waitTimer += Time.deltaTime * speedRatio;
             if (waitTimer >= waitInterval)
             {
                 isWaitingNextAction = false;
@@ -183,4 +185,9 @@
         recordActionQueue.Clear();
         immediatelyActionList.Clear();
     }
+
+    public void SetSpeedRatio(float ratio)
+    {
+        speedRatio = ratio;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 7e83c22..049ac80 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -151,7 +151,7 @@
 		// battleField.battleTweenMgr.OnPlayTween(tweener);
 	}
 
-	protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null)
+	protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null, float speed = 500f)
 	{
 		//	鍘熷湴閲婃斁
 		if (skillConfig.CastDistance >= 9999)
@@ -165,7 +165,7 @@
 		{
 			caster.motionBase.PlayAnimation(MotionName.idle, true);
 			_onComplete?.Invoke();
-		});
+		}, speed);
 		battleField.battleTweenMgr.OnPlayTween(tweener);
 	}
 
@@ -199,7 +199,7 @@
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
 							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, 
-								OnAttackFinish);
+								OnAttackFinish, 750F);
 						}
 					, -1f);
 				});
@@ -238,7 +238,7 @@
 						{
 							RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish);
+							MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish, 750F);
 						}
 					, -1f);
 				});
@@ -268,7 +268,7 @@
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
 							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum),
-								Vector2.zero, OnAttackFinish);
+								Vector2.zero, OnAttackFinish, 750F);
 						}
 					, -1f);
 				});
@@ -372,6 +372,9 @@
 
 	protected void HighLightAllTargets()
 	{
+		if (skillConfig.FuncType != 2)
+			return;
+
 		// 楂樹寒鎵�鏈夌洰鏍�
 		List<BattleObject> highlightList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
 		highlightList.Add(caster);
@@ -383,15 +386,17 @@
 			BattleObject bo = allList[i];
 			if (highlightList.Contains(bo))
 			{
-				bo.SetToFront();
+				bo.layerMgr.SetFront();
+				bo.heroRectTrans.SetParent(battleField.battleRootNode.skillFrontNode, true);
 			}
 			else
 			{
-				bo.SetToBack();
+				bo.layerMgr.SetBack();
+				bo.heroRectTrans.SetParent(battleField.battleRootNode.skillBackNode, true);
 			}
 		}
 
-		// battleField.skillMask.SetActive(true);
+		battleField.battleRootNode.skillMaskNode.SetActive(true);
 
 		// caster.battleField.skillMask
 		//	鎶婅繖浜汢O鍏ㄩ珮浜� 鎴栬�呰鎶婇櫎浜嗚繖浜涚殑閮芥斁鍦ㄩ伄缃╁悗闈�
@@ -622,7 +627,25 @@
 			}
 		}
 
-		return isFinished && moveFinished;
+		if (isFinished && moveFinished)
+		{
+			List<BattleObject> allList = battleField.battleObjMgr.allBattleObjDict.Values.ToList<BattleObject>();
+			for (int i = 0; i < allList.Count; i++)
+			{
+				BattleObject bo = allList[i];
+				bo.layerMgr.SetFront();
+				bo.heroRectTrans.SetParent(battleField.GetTeamNode(bo.Camp, bo.teamHero.positionNum), true);
+			}
+			battleField.battleRootNode.skillMaskNode.SetActive(false);
+
+
+
+			return true;
+		}
+		else
+		{
+			return false;
+		}
 	}
 
 	public virtual void ForceFinished()
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 47cd4c1..1160b31 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -167,7 +167,7 @@
     private void ShotToIndex(BattleCamp camp, int targetIndex, int bulletIndex)
     {
         RectTransform targetTransform = caster.battleField.GetTeamNode(camp, targetIndex);
-        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
 
         RectTransform effectTrans = effectPlayer.transform as RectTransform;
 
@@ -295,7 +295,7 @@
 
     protected void ShotToTarget(BattleObject target, int bulletIndex)
     {
-        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
 
         var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, bulletIndex, (index, hitList) =>
         {
@@ -336,7 +336,7 @@
         if (effectId <= 0)
             return;
 
-        var effect = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, effectId, parent, camp);
+        var effect = caster.battleField.battleEffectMgr.PlayEffect(caster, effectId, parent, camp);
         if (effect != null)
         {
             effect.transform.localRotation = parent.localRotation;
diff --git a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
index 140ddf8..0f3feef 100644
--- a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
@@ -29,12 +29,12 @@
 
         if (skillConfig.ExplosionEffectId > 0)
         {
-            caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.ExplosionEffectId, targetTransform, caster.Camp);
+            caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.ExplosionEffectId, targetTransform, caster.Camp);
         }
 
         if (skillConfig.ExplosionEffect2 > 0)
         {
-            caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.ExplosionEffect2, targetTransform, caster.Camp);
+            caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.ExplosionEffect2, targetTransform, caster.Camp);
         }
 
         for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
@@ -49,7 +49,7 @@
 
             if (skillConfig.ExplosionEffect3 > 0)
             {
-                caster.battleField.battleEffectMgr.PlayEffect(target.ObjID, skillConfig.ExplosionEffect3, target.heroGo.transform, caster.Camp);
+                caster.battleField.battleEffectMgr.PlayEffect(target, skillConfig.ExplosionEffect3, target.heroGo.transform, caster.Camp);
             }
         }
 
diff --git a/Main/System/Battle/SkillEffect/SkillEffect.cs b/Main/System/Battle/SkillEffect/SkillEffect.cs
index 023db9c..6932b1c 100644
--- a/Main/System/Battle/SkillEffect/SkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/SkillEffect.cs
@@ -27,11 +27,11 @@
         onHit = _onHit;
         if (skillConfig.EffectId > 0)
         {
-            caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.EffectId, caster.heroRectTrans, caster.Camp);
+            caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.EffectId, caster.heroRectTrans, caster.Camp);
         }
         if (skillConfig.EffectId2 > 0)
         {
-            caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.EffectId2, caster.heroRectTrans, caster.Camp);
+            caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.EffectId2, caster.heroRectTrans, caster.Camp);
         }
     }
 
@@ -50,7 +50,7 @@
         if (skillConfig.MStartEffectId <= 0)
             return;
         //  涓憞鍥哄畾鐗规晥
-        caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.MStartEffectId, caster.heroGo.transform, caster.Camp);
+        caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.MStartEffectId, caster.heroGo.transform, caster.Camp);
     }
     
     /// <summary>

--
Gitblit v1.8.0