yyl
7 天以前 f117a66e56b184cbac53b279a7cfca8b7e9409be
125 战斗 复活相关前端表现
3个文件已修改
69 ■■■■■ 已修改文件
Main/System/Battle/BattleField/BattleField.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs
@@ -476,6 +476,11 @@
        }
    }
    public virtual void OnObjReborn(uint objId)
    {
        processingDeathObjIds.Remove(objId);
    }
    public virtual void Destroy()
    {
        ForceFinish();
Main/System/Battle/BattleObject/BattleObject.cs
@@ -465,11 +465,13 @@
    public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData)
    {
        // 处理复活逻辑
        battleField.OnObjReborn((uint)ObjID);
        teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx);
        // Debug.LogError("OnReborn " + teamHero.curHp);
        teamHero.isDead = false;
        heroGo.SetActive(true);
        motionBase.ResetToIdleAnimation();
        motionBase.ResetForReborn();
    }
    // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给
Main/System/Battle/Motion/MotionBase.cs
@@ -540,6 +540,7 @@
        resumeTime = Time.time;
    }
    // 原有的 HaveRest 保持不变,用于一般的重置
    public void HaveRest()
    {
        animState?.ClearTracks();
@@ -564,6 +565,60 @@
        PlayAnimation(MotionName.idle, true);
    }
    // 新增:专门用于复活的完整重置方法
    public void ResetForReborn()
    {
        // 1. 清理所有动画轨道(包括死亡动画的轨道9)
        animState?.ClearTracks();
        // 2. 清理所有回调和动作队列
        trackEntryCallbacks.Clear();
        runningActions.Clear();
        activeSkillTracks.Clear();
        // 3. 重置子技能轨道池
        if (availableSubTracks == null)
            availableSubTracks = new Queue<int>();
        else
            availableSubTracks.Clear();
        subSkillTrackMap.Clear();
        for (int i = 1; i <= 8; i++)
            availableSubTracks.Enqueue(i);
        // 4. 清空轨道引用
        currentTrack = null;
        // 5. 重置所有状态标志
        playingSkillAnim = false;
        isUnderControl = false;
        // 6. 重置时间相关字段(关键!)
        pauseTime = 0f;
        resumeTime = 0f;
        pausedAccumulated = 0f;
        pauseStart = 0f;
        // 7. 重置时间缩放为正常速度
        MotionTimeScale = 1f;
        if (skeletonAnim != null)
            skeletonAnim.timeScale = MotionTimeScale;
        // 8. 清理残影效果
        if (illusionShadow != null)
            illusionShadow.Show(false);
        // 9. 重置骨骼到初始姿态(关键!防止死亡姿态残留)
        if (skeleton != null)
        {
            skeleton.SetToSetupPose();
            // skeleton.UpdateWorldTransform();
        }
        // 10. 播放待机动画
        PlayAnimation(MotionName.idle, true);
    }
    public void SetSpeedRatio(float ratio)
    {
        MotionTimeScale = ratio;
@@ -579,9 +634,4 @@
        }
    }
    internal void ResetToIdleAnimation()
    {
        // 清空之前的状态
        HaveRest();
    }
}