From a966d3ece73d1a7be49c8187702b94480d8f7861 Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期五, 12 九月 2025 17:55:25 +0800 Subject: [PATCH] 125 战斗 伤害问题修复1 --- Main/System/Battle/Motion/MotionBase.cs | 54 ++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs index 3f81ccf..7a35dd2 100644 --- a/Main/System/Battle/Motion/MotionBase.cs +++ b/Main/System/Battle/Motion/MotionBase.cs @@ -25,9 +25,11 @@ public Action OnAttackAnimationComplete; public Action OnHitAnimationComplete; public Action<string> onAnimationComplete; + + private List<Action> runActionList = new List<Action>(); #region 缁勪欢寮曠敤 - + protected SkeletonGraphic skeletonGraphic; protected Spine.AnimationState spineAnimationState; protected Spine.Skeleton skeleton; @@ -42,6 +44,7 @@ #endregion private Spine.TrackEntry currentTrackEntry; + #region 鍒濆鍖栨柟娉� @@ -134,6 +137,16 @@ return currentTrackEntry; } + private void RunAction(Action _action) + { + runActionList.Add(_action); + } + + private void RemoveRunAction(Action _action) + { + runActionList.Remove(_action); + } + public Spine.TrackEntry PlaySkillAnimation(SkillConfig skillConfig, SkillBase skillBase, Action _onComplete = null) { // 鍙傛暟鏍¢獙 @@ -174,12 +187,10 @@ } // 鍏抽敭甯у弬鏁� - float fps = BattleConst.skillMotionFps; - float middleBeginTime = skillConfig.StartupFrames / fps; int loopCount = skillConfig.LoopCount; int[] activeFrames = skillConfig.ActiveFrames; int activeFrameCount = activeFrames.Length; - float recoveryFrameTime = skillConfig.RecoveryFrames / fps; + float recoveryFrame = skillConfig.RecoveryFrames; // 鎾斁鍔ㄧ敾 var skillTrackEntry = spineAnimationState.SetAnimation(0, anim, false); @@ -198,21 +209,23 @@ skillBase.OnSkillStart(); // 鍔ㄧ敾甯ф洿鏂板鐞� - Spine.Unity.UpdateBonesDelegate updateLocalHandler = null; - updateLocalHandler = (ISkeletonAnimation animated) => + int triggerMFEndCount = 0; + Action updateLocalHandler = null; + updateLocalHandler = () => { if (isFinish) return; - float trackTime = skillTrackEntry.TrackTime; + + float frame = (skillTrackEntry.TrackTime * (float)BattleConst.skillMotionFps); // 鍓嶆憞缁撴潫锛堝彧瑙﹀彂涓�娆★級 - if (!beginPhaseTriggered && trackTime >= middleBeginTime && curLoop == 0) + if (!beginPhaseTriggered && frame >= skillConfig.StartupFrames && curLoop == 0) { beginPhaseTriggered = true; skillBase.OnStartSkillFrameEnd(); } // 涓憞寮�濮嬶紙姣忚疆loop鐨勫紑濮嬶紝鍙Е鍙戜竴娆★級 - if (!middleFrameStarted && trackTime >= middleBeginTime && curLoop <= loopCount) + if (!middleFrameStarted && frame >= skillConfig.StartupFrames && curLoop <= loopCount) { middleFrameStarted = true; skillBase.OnMiddleFrameStart(curLoop); @@ -221,10 +234,10 @@ // 澶氭鏀诲嚮甯цЕ鍙� for (int hitIndex = 0; hitIndex < activeFrameCount; hitIndex++) { - float activeFrameTime = activeFrames[hitIndex] / fps; - if (!triggeredActiveFrame[hitIndex] && trackTime >= activeFrameTime) + float activeFrame = activeFrames[hitIndex]; + if (!triggeredActiveFrame[hitIndex] && frame >= activeFrame) { - skillBase.OnMiddleFrameEnd(curLoop, hitIndex); + skillBase.OnMiddleFrameEnd(curLoop, triggerMFEndCount++); triggeredActiveFrame[hitIndex] = true; } } @@ -250,7 +263,7 @@ if (curLoop < loopCount) { // 閲嶆柊璁剧疆鍒扮涓�娆$殑涓憞鏃堕棿 - skillTrackEntry.TrackTime = middleBeginTime; + skillTrackEntry.TrackTime = skillConfig.StartupFrames / BattleConst.skillMotionFps; beginPhaseTriggered = false; } else @@ -264,16 +277,16 @@ // 鏀跺熬闃舵锛歄nFinalFrameStart 鍜� OnFinalFrameEnd if (curLoop >= loopCount) { - if (!finalFrameStarted && trackTime >= recoveryFrameTime) + if (!finalFrameStarted && frame >= recoveryFrame) { finalFrameStarted = true; skillBase.OnFinalFrameStart(); } - if (finalFrameStarted && !finalFrameEnded && trackTime >= recoveryFrameTime) + if (finalFrameStarted && !finalFrameEnded && frame >= recoveryFrame) { finalFrameEnded = true; skillBase.OnFinalFrameEnd(); - skeletonGraphic.UpdateLocal -= updateLocalHandler; + RemoveRunAction(updateLocalHandler); isFinish = true; } } @@ -284,7 +297,8 @@ trackEntryCompleteDict[currentTrackEntry] = _onComplete; } - skeletonGraphic.UpdateLocal += updateLocalHandler; + RunAction(updateLocalHandler); + return skillTrackEntry; } @@ -334,7 +348,10 @@ public virtual void Run() { - + for (int i = runActionList.Count - 1; i >= 0; i--) + { + runActionList[i]?.Invoke(); + } } public virtual void Pause() @@ -352,6 +369,7 @@ public void HaveRest() { trackEntryCompleteDict.Clear(); + runActionList.Clear(); PlayAnimation(MotionName.idle, true); } -- Gitblit v1.8.0