From f59b136d28cbfc0b9de9bced637845ce35345d95 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 21 一月 2026 20:04:26 +0800
Subject: [PATCH] 125 战斗 处理卡死问题
---
Main/System/Battle/Motion/MotionBase.cs | 34 ++++++++++++++++++++++++++++++++--
1 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index a8c44a3..336772a 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -15,6 +15,8 @@
};
private Dictionary<Spine.TrackEntry, Action> trackEntryCallbacks = new Dictionary<Spine.TrackEntry, Action>();
+
+ private Dictionary<int, SkillBase> skillTrackDict = new Dictionary<int, SkillBase>();
public Action OnAttackAnimationComplete;
public Action OnHitAnimationComplete;
private List<Action> runningActions = new List<Action>();
@@ -89,6 +91,7 @@
currentTrack = null;
playingSkill = false;
playingSkillWithAnim = false;
+ skillTrackDict.Clear();
}
public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop, Action onComplete = null)
@@ -181,7 +184,6 @@
private Spine.TrackEntry ExecuteSkillAnim(SkillConfig skillConfig, SkillBase skillBase, Action onComplete,
Spine.Animation targetAnim, bool hasAnim, bool isSubSkill)
{
- bool isPangdeSkill = 1003020 == skillConfig.SkillID;
int loopCount = skillConfig.LoopCount;
// 鍓嶆憞
@@ -224,7 +226,8 @@
if (hasAnim)
{
- if (null != skillTrack)
+ // 妫�鏌ヨ建閬撴槸鍚﹀凡琚崰鐢紙淇锛氬師鏉ユ鏌� null != skillTrack 姘歌繙涓� false锛�
+ if (activeSkillTracks.ContainsKey(trackIndex) || skillTrackDict.ContainsKey(trackIndex))
{
//绛夊緟涓婁竴鎶�鑳藉姩鐢荤粨鏉� 鏆傛椂澶勭悊鍔炴硶
UniTaskExtension.DelayFrames((GameObject)null, 1, () =>
@@ -250,6 +253,14 @@
}
return null;
}
+
+ if (skillTrackDict.ContainsKey(trackIndex))
+ {
+ skillBase.ForceFinished();
+ skillTrackDict.Remove(trackIndex);
+ }
+
+ skillTrackDict[trackIndex] = skillBase;
// 鍙湁涓绘妧鑳芥墠鏇存柊 currentTrack
if (!isSubSkill)
@@ -279,6 +290,7 @@
{
if (skillBase.IsFinished())
{
+ skillTrackDict.Remove(trackIndex);
// 娓呯悊骞堕��鍑猴紙淇濊瘉鐘舵�佷竴鑷达級
if (skillTrack != null && activeSkillTracks.ContainsKey(trackIndex))
{
@@ -332,6 +344,8 @@
// 妫�鏌ュ綋鍓嶈建閬撴槸鍚﹁鏂版妧鑳借鐩�
if (!activeSkillTracks.ContainsKey(trackIndex) || activeSkillTracks[trackIndex] != skillTrack)
{
+ skillTrackDict[trackIndex].ForceFinished();
+ skillTrackDict.Remove(trackIndex);
Debug.LogError("鎶�鑳藉姩鐢昏鎵撴柇锛屽己鍒剁粨鏉� " + skillConfig.SkillID);
skillBase.ForceFinished();
@@ -471,6 +485,8 @@
{
playingSkill = false;
}
+
+ skillTrackDict.Remove(trackIndex);
RemoveAction(frameHandler);
onComplete?.Invoke();
@@ -627,6 +643,13 @@
runningActions.Clear();
activeSkillTracks.Clear();
+ // 寮哄埗缁撴潫鎵�鏈夋鍦ㄦ墽琛岀殑鎶�鑳�
+ foreach (var kv in skillTrackDict)
+ {
+ kv.Value?.ForceFinished();
+ }
+ skillTrackDict.Clear();
+
// 閲嶇疆瀛愭妧鑳借建閬撴睜
if (availableSubTracks == null)
availableSubTracks = new Queue<int>();
@@ -659,6 +682,13 @@
activeSkillTracks.Clear();
+ // 寮哄埗缁撴潫鎵�鏈夋鍦ㄦ墽琛岀殑鎶�鑳斤紙澶嶆椿鏃堕渶瑕佹竻鐞嗘墍鏈夋妧鑳界姸鎬侊級
+ foreach (var kv in skillTrackDict)
+ {
+ kv.Value?.ForceFinished();
+ }
+ skillTrackDict.Clear();
+
// 3. 閲嶇疆瀛愭妧鑳借建閬撴睜
if (availableSubTracks == null)
availableSubTracks = new Queue<int>();
--
Gitblit v1.8.0