From 3ce47ce4e7a13212a1efb32d0625222a8b18655d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 23 十月 2025 18:56:44 +0800
Subject: [PATCH] 125 战斗 修复暂停导致的技能时间错误问题 修复因为设置多个 TimeScale导致的速度翻倍问题
---
Main/Component/UI/Common/SkeletonIllusionShadow.cs | 2 --
Main/System/Battle/Motion/MotionBase.cs | 35 ++++++++++++++++++++++++++++-------
Main/Component/UI/Effect/BattleEffectPlayer.cs | 11 -----------
3 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/Main/Component/UI/Common/SkeletonIllusionShadow.cs b/Main/Component/UI/Common/SkeletonIllusionShadow.cs
index eba83e6..29244ac 100644
--- a/Main/Component/UI/Common/SkeletonIllusionShadow.cs
+++ b/Main/Component/UI/Common/SkeletonIllusionShadow.cs
@@ -89,8 +89,6 @@
playedEntry.TrackTime = trackEntry.TrackTime;
sa.timeScale = 0;
- sa.AnimationState.TimeScale = 0;
- playedEntry.TimeScale = 0;
RendererAdjuster parent = skeletonAnimation.GetComponentInParent<RendererAdjuster>();
objTest.AddMissingComponent<RendererAdjuster>().SetSortingOrder(parent.sortingOrder);
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 3e3c0d2..8dbbc57 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -377,7 +377,6 @@
spineComp.enabled = true;
spineComp.timeScale = speedRate;
- spineAnimationState.TimeScale = speedRate;
Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
@@ -561,11 +560,6 @@
spineComp.timeScale = 0f;
}
- if (spineAnimationState != null)
- {
- spineAnimationState.TimeScale = 0f;
- }
-
// Animator鍔ㄧ敾
foreach (var animator in animatorList)
{
@@ -586,11 +580,6 @@
if (spineComp != null)
{
spineComp.timeScale = speedRate;
- }
-
- if (spineAnimationState != null)
- {
- spineAnimationState.TimeScale = speedRate;
}
// Animator鍔ㄧ敾
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index f969f71..bcd142e 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -26,6 +26,10 @@
private SkeletonIllusionShadow illusionShadow;
private bool playingSkillAnim = false;
+ private float pauseTime = 0f;
+
+ private float resumeTime = 0f;
+
public virtual void Init(SkeletonAnimation skelAnim)
{
skeletonAnim = skelAnim;
@@ -36,7 +40,6 @@
}
animState = skeletonAnim.AnimationState;
- animState.TimeScale = MotionTimeScale;
skeletonAnim.timeScale = MotionTimeScale;
skeleton = skeletonAnim.Skeleton;
@@ -118,6 +121,9 @@
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;
int[] activeFrames = skillConfig.ActiveFrames ?? new int[0];
int frameCount = activeFrames.Length;
@@ -149,9 +155,25 @@
return;
}
- float currentFrame = 0f;
- if (BattleConst.skillMotionFps > 0)
- currentFrame = hasAnim ? (skillTrack.TrackTime * skillTrack.TimeScale * BattleConst.skillMotionFps) : ((Time.time - startTime) * MotionTimeScale * BattleConst.skillMotionFps);
+ float trackTime = 0f; //hasAnim ? skillTrack.TrackTime * skillTrack.TimeScale : (Time.time - startTime) * MotionTimeScale;
+
+ if (hasAnim)
+ {
+ trackTime = skillTrack.TrackTime;
+ }
+ else
+ {
+ float adjustedTime = Time.time;
+ if (pauseTime > 0f && resumeTime > pauseTime)
+ {
+ startTime = startTime + (resumeTime - pauseTime);
+ pauseTime = 0f;
+ resumeTime = 0f;
+ }
+ trackTime = (adjustedTime - startTime) * MotionTimeScale;
+ }
+
+ float currentFrame = trackTime * BattleConst.skillMotionFps;
if (hasAnim)
{
@@ -314,14 +336,14 @@
public virtual void Pause()
{
- if (animState != null) animState.TimeScale = 0f;
if (skeletonAnim != null) skeletonAnim.timeScale = 0f;
+ pauseTime = Time.time;
}
public virtual void Resume()
{
- if (animState != null) animState.TimeScale = MotionTimeScale;
if (skeletonAnim != null) skeletonAnim.timeScale = MotionTimeScale;
+ resumeTime = Time.time;
}
public void HaveRest()
@@ -335,7 +357,6 @@
public void SetSpeedRatio(float ratio)
{
MotionTimeScale = ratio;
- if (animState != null) animState.TimeScale = ratio;
if (skeletonAnim != null) skeletonAnim.timeScale = ratio;
}
--
Gitblit v1.8.0