125 战斗 修复暂停导致的技能时间错误问题 修复因为设置多个 TimeScale导致的速度翻倍问题
3个文件已修改
48 ■■■■■ 已修改文件
Main/Component/UI/Common/SkeletonIllusionShadow.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Effect/BattleEffectPlayer.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
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动画
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;
    }