TH1/MD/CrashSight_2026-06-01_0.7.2b_1day/blocking/009_maprenderer-highlight-keynotfound.md
2026-06-02 17:57:13 +08:00

2.6 KiB
Raw Blame History

移动攻击高亮字典 Key 缺失

  • 分类blocking
  • Issue 数1
  • 0.7.2b 最近一天次数2
  • 设备数合计1
  • 报告生成2026-06-01 16:49:36

Issue

Issue 类型 次数 设备 最近上报 消息
0bbff28f08b867749349762f2e47eac2 KeyNotFoundException 2 1 2026-06-01 15:53:26 The given key '1986' was not present in the dictionary.

解码结论

  • 解码栈定位到 TH1Renderer.MapRenderer.SetUnitAllMoveAttackTargetHighlight(uint uid),从 MapInteraction.OnTileClicked 的选择单位路径进入。
  • Key 1986 缺失说明移动/攻击高亮计算时,逻辑 MapData 或渲染字典中已经没有该单位/格子的对应项。
  • 该样本没有可用 device 上下文;根因仍是不完整判断,但直接风险点是 SetUnitAllMoveAttackTargetHighlight 未对 GetUnitDataByUnitIdGetGridDataByUnitIdROUnitMap/ROGridMap 查找失败做退出。
  • 建议高亮前重新确认单位仍在当前地图且渲染对象存在,失败时清理选择态并跳过高亮。

设备上下文

0bbff28f08b867749349762f2e47eac2

  • 样本 CrashId02e7f4ce7a464d528ecddbbb9e25c740
  • 样本 DeviceId58-11-22-3d-24-32
  • CrashSight 附带日志文件:False

该样本未能从 API 取得可用 device 上下文,根因判断保持不完整。

代码位置

  • Unity/Assets/Scripts\TH1_Renderer\MapRenderer.cs:577: public bool SetUnitAllMoveAttackTargetHighlight(uint uid) //渲染所有可移动位置的高亮,其中可以攻击的位置要标红,如果是自己人或者敌人在移动范围内但是不在攻击范围内,则不能高亮
  • Unity/Assets/Scripts\TH1_Logic\Map\MapInteraction.cs:269: MapRenderer.Instance.SetUnitAllMoveAttackTargetHighlight(unitData.Id);
  • Unity/Assets/Scripts\TH1_Logic\Skill\AllSkill\InfiltrateSkill.cs:140: // 依赖 CalcUnitMoveInfo 已对 self 计算过(玩家点击路径由 SetUnitAllMoveAttackTargetHighlight 保证;

判断

这是阻断类,因为 CrashSight 行或 LogError 包装内容中存在真实异常类型、异常对象或调用栈;不是单纯业务状态诊断。 本批样本 hasLogFile=falseAPI 能拿到的是最终上报内容和同设备 ERROR 上报序列,不包含完整 Unity 运行日志;根因上下文按可见上报链路记录。

建议

优先按次数最高的 Issue 样本复现并修复;若同设备上报序列中出现更早的异常,应以更早异常作为源头处理。