yyl
2026-01-09 ed9bf64c03bf5fee5e115645de5a975baaa9041d
Main/System/Battle/Motion/MotionBase.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
using Spine.Unity;
using Cysharp.Threading.Tasks;
public class MotionBase
{
@@ -64,6 +65,7 @@
        PlayAnimation(MotionName.idle, true);
        SetupAnimationHandlers();
        skillTrack = null;
        
        if (skelAnim.gameObject != null)
            illusionShadow = skelAnim.gameObject.AddMissingComponent<SkeletonIllusionShadow>();
@@ -173,6 +175,9 @@
        return ExecuteSkillAnim(skillConfig, skillBase, onComplete, targetAnim, true, isSubSkill);
    }
    private Spine.TrackEntry skillTrack = null;
    private Spine.TrackEntry ExecuteSkillAnim(SkillConfig skillConfig, SkillBase skillBase, Action onComplete,
        Spine.Animation targetAnim, bool hasAnim, bool isSubSkill)
    {
@@ -215,10 +220,22 @@
            }
        }
        
        Spine.TrackEntry skillTrack = null;
        
        if (hasAnim)
        {
            if (null != skillTrack)
            {
                //等待上一技能动画结束 暂时处理办法
                UniTaskExtension.DelayFrames((GameObject)null, 1, () =>
                {
                    if (skillBase != null && !skillBase.IsFinished())
                    {
                        PlaySkillAnimation(skillConfig, skillBase, isSubSkill, onComplete);
                    }
                });
                return null;
            }
            skillTrack = animState.SetAnimation(trackIndex, targetAnim, false);
            if (null == skillTrack)
            {
@@ -441,6 +458,7 @@
                    RemoveAction(frameHandler);
                    onComplete?.Invoke();
                    skillBase.OnFinalFrameEnd();
                    skillTrack = null;
                }
            }
        };
@@ -599,6 +617,8 @@
            availableSubTracks.Enqueue(i);
        currentTrack = null;
        skillTrack = null;
        
        playingSkillAnim = false;
        PlayAnimation(MotionName.idle, true);
@@ -657,7 +677,7 @@
            skeleton.SetToSetupPose();
            // skeleton.UpdateWorldTransform();
        }
        skillTrack = null;
        // 10. 播放待机动画
        PlayAnimation(MotionName.idle, true);
        skeletonAnim.LateUpdate();
@@ -678,4 +698,9 @@
        }
    }
    public bool CanCastSkill()
    {
        //  上次释放的技能 释放结束了没有
        return !playingSkillAnim;
    }
}