| | |
| | | |
| | | if (castingSkillDict.TryGetValue(objID, out skillBases)) |
| | | { |
| | | #if UNITY_EDITOR |
| | | // 诊断:同一个 caster 已经在 casting,说明前一个技能没正确 Remove。 |
| | | // 打印现存技能的 skillId / StateFlags,方便定位泄漏点。 |
| | | var sb = new System.Text.StringBuilder(); |
| | | sb.Append("BattleField.AddCastingSkill 发现同 caster 已有 ").Append(skillBases.Count).Append(" 个 casting 技能未清理:objID=").Append(objID); |
| | | sb.Append(" 新入=skillId=").Append(skill?.skillConfig?.SkillID ?? 0); |
| | | for (int i = 0; i < skillBases.Count; i++) |
| | | { |
| | | var s = skillBases[i]; |
| | | sb.Append("\n [").Append(i).Append("] skillId=") |
| | | .Append(s?.skillConfig?.SkillID ?? 0) |
| | | .Append(" StateFlags=").Append(s == null ? "null" : s.StateFlagsForDebug.ToString()); |
| | | } |
| | | BattleDebug.LogError(sb.ToString()); |
| | | #endif |
| | | skillBases.Add(skill); |
| | | } |
| | | else |
| | |
| | | |
| | | if (castingSkillDict.TryGetValue(objID, out skillBases)) |
| | | { |
| | | #if UNITY_EDITOR |
| | | bool existed = skillBases.Contains(skillBase); |
| | | if (!existed) |
| | | { |
| | | BattleDebug.LogError($"BattleField.RemoveCastingSkill 目标不在 casting 列表:objID={objID} skillId={skillBase?.skillConfig?.SkillID ?? 0}"); |
| | | } |
| | | #endif |
| | | skillBases.Remove(skillBase); |
| | | |
| | | if (skillBases.Count == 0) |
| | |
| | | castingSkillDict.Remove(objID); |
| | | } |
| | | } |
| | | #if UNITY_EDITOR |
| | | else |
| | | { |
| | | BattleDebug.LogError($"BattleField.RemoveCastingSkill objID 不在字典里:objID={objID} skillId={skillBase?.skillConfig?.SkillID ?? 0}"); |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | public bool IsCastingSkill(long objID) |