yyl
昨天 0713673af41f9661619588e2d5f1abd567a6458b
125 战斗 修复因为死亡动作被中断导致的战斗卡死
3个文件已修改
41 ■■■■■ 已修改文件
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -2,6 +2,8 @@
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
//  如果这个Action卡住了 大概率是因为 动作被其他动作中断了 导致没有回调
public class DeathRecordAction : RecordAction
{
    protected List<HB422_tagMCTurnFightObjDead> deadPackList = new List<HB422_tagMCTurnFightObjDead>();
@@ -62,8 +64,6 @@
            {
                isFinish = true;
            }
            return;
        }
    }
Main/System/Battle/BattleObject/BattleObject.cs
@@ -405,7 +405,7 @@
    public virtual void OnDeath(Action _onDeathAnimationComplete)
    {
        buffMgr.RemoveAllBuff();
        motionBase.PlayAnimation(MotionName.dead, false, () =>
        motionBase.PlayDeadAnimation(() =>
        {
            teamHero.isDead = true;
            OnDeadAnimationComplete();
Main/System/Battle/Motion/MotionBase.cs
@@ -105,6 +105,41 @@
        return currentTrack;
    }
    public virtual Spine.TrackEntry PlayDeadAnimation(Action onComplete = null)
    {
        if (animState == null) return null;
        // 使用轨道9作为死亡动画专用轨道(独立于主轨道0和子技能轨道1-8)
        const int deathTrackIndex = 9;
        // 清除死亡轨道上的回调
        if (activeSkillTracks.TryGetValue(deathTrackIndex, out var oldDeathTrack))
        {
            if (trackEntryCallbacks.ContainsKey(oldDeathTrack))
                trackEntryCallbacks.Remove(oldDeathTrack);
        }
        Spine.Animation deadAnim = FindAnim(MotionName.dead.ToString());
        if (deadAnim == null)
        {
            Debug.LogError("找不到死亡动画");
            onComplete?.Invoke();
            return null;
        }
        Spine.TrackEntry deathTrack = animState.SetAnimation(deathTrackIndex, deadAnim, false);
        if (deathTrack != null)
        {
            activeSkillTracks[deathTrackIndex] = deathTrack;
            if (onComplete != null)
                trackEntryCallbacks[deathTrack] = onComplete;
        }
        return deathTrack;
    }
    private void AddAction(Action action) => runningActions.Add(action);
    private void RemoveAction(Action action) => runningActions.Remove(action);