| | |
| | | private bool playingSkill = false; |
| | | |
| | | private bool _playingSkillWithAnim = false; |
| | | #if UNITY_EDITOR |
| | | // [卡死诊断] 记录是谁把 playingSkillWithAnim 锁为 true、在哪一帧,供 SkillBase.ReportStuckIfNeeded 使用。 |
| | | // 不做 Run() 内 watchdog(避免刷屏);只在 SkillBase 自身发现卡死时一次性把这些信息打出来。 |
| | | private int _pswaSetTrueFrame = -1; |
| | | private int _pswaSetTrueSkillId = 0; |
| | | private string _pswaSetTrueStack = null; |
| | | #endif |
| | | private bool playingSkillWithAnim |
| | | { |
| | | get => _playingSkillWithAnim; |
| | |
| | | // 每次变更打印栈,定位到底是谁把 playingSkillWithAnim 设 true 了、谁清/不清 |
| | | BattleDebug.LogError($"[MotionBase owner={owner} hash={GetHashCode()}] playingSkillWithAnim {_playingSkillWithAnim} -> {value}\n" |
| | | + UnityEngine.StackTraceUtility.ExtractStackTrace()); |
| | | } |
| | | // [卡死诊断] 维护锁的持有者信息(上一轮的字段被回滚了,这里是最小必要集合) |
| | | if (value && !_playingSkillWithAnim) |
| | | { |
| | | _pswaSetTrueFrame = UnityEngine.Time.frameCount; |
| | | _pswaSetTrueStack = UnityEngine.StackTraceUtility.ExtractStackTrace(); |
| | | // skillId 由 ExecuteSkillAnim 紧接着赋值(setter 这里拿不到) |
| | | } |
| | | else if (!value && _playingSkillWithAnim) |
| | | { |
| | | _pswaSetTrueFrame = -1; |
| | | _pswaSetTrueSkillId = 0; |
| | | _pswaSetTrueStack = null; |
| | | } |
| | | #endif |
| | | _playingSkillWithAnim = value; |
| | |
| | | activeSkillTracks[trackIndex] = skillTrack; |
| | | |
| | | playingSkillWithAnim = true; |
| | | #if UNITY_EDITOR |
| | | // [卡死诊断] setter 里拿不到 skillId,这里补上,供 SkillBase.ReportStuckIfNeeded dump |
| | | _pswaSetTrueSkillId = skillConfig != null ? skillConfig.SkillID : 0; |
| | | #endif |
| | | } |
| | | |
| | | playingSkill = true; |
| | |
| | | #if UNITY_EDITOR |
| | | /// <summary>卡死诊断用:暴露 playingSkillWithAnim 标志位。</summary> |
| | | public bool PlayingSkillWithAnimForDebug => playingSkillWithAnim; |
| | | |
| | | // [卡死诊断] 给 SkillBase 卡死报告用:谁把 playingSkillWithAnim 锁为 true、在哪一帧。 |
| | | public int PlayingSkillAnimOwnerSkillIdForDebug => _pswaSetTrueSkillId; |
| | | public int PlayingSkillAnimOwnerFrameForDebug => _pswaSetTrueFrame; |
| | | public string PlayingSkillAnimOwnerStackForDebug => _pswaSetTrueStack; |
| | | #endif |
| | | |
| | | public bool CanStartDeath() |