2026-06-12 17:56:35 +08:00

6.7 KiB
Raw Blame History

0.7.3f 下午补抓人工分析

  • 抓取时间2026-06-12 15:50:49
  • 范围:0.7.3flast_1_dayERROR未处理/处理中
  • 早上14 个 Issueblocking 1 个 / 1 次logerror 13 个 / 45 次
  • 下午53 个 Issueblocking 5 个 / 13 次logerror 48 个 / 190 次
  • 差异:新增 39 个 Issue早上 14 个 Issue 全部仍存在

P0 / 必须先看

1. TMP 子网格禁用时空引用

  • Issuedc1340f866d020b4b560a92559c89a210b41041d271c3ca1128d6f10e46b27b20c808432af82e7b66883205719dbb199
  • 数量9 次,设备数合计 8
  • 栈:TMPro.TMP_SubMeshUI.UpdateMaterial -> SetMaterialDirty -> MaskableGraphic/Image.OnDisable
  • 判断:崩溃发生在 UI 对象 disable/destroy 期间TMP 子网格刷新材质时内部对象为空。0c808... 同设备同一秒还有多语言资源加载为空,说明至少与 UI 销毁/重建、多语言文本刷新处于同一批操作,但当前没有完整 Player.log不能证明多语言 null 是直接原因。
  • 建议:优先排查带富文本/TMP 子网格的 UI 销毁、reparent、SetActive 流程;重点看 Wiki/公告/弹窗等含多语言文本且会批量销毁子节点的页面。

2. StartGame 重大事件公告 UI 空引用

  • Issuefe24c7bf54531228f55d73530508a9fa
  • 数量1 次,设备数 1
  • 栈:Main.NetStartGame -> EventManager.Publish<ShowUIAnnounceMajorEvent> -> UIAnnounceMajorEventController.OnOpen -> UIAnnounceMajorEventView.SetContent
  • 判断:这是项目代码捕获到的真实 System.NullReferenceExceptionSetContent 已检查 Title/Content/LeaderImage/WonderImage,所以更可疑的是 StartGame 分支后续假设对象:Main.MapData.PlayerMap.SelfPlayerDataGetPlayerInfo 失败后的 playerInfoplayerInfo 字段、多语言、AudioManager.InstanceChatBubbleText
  • 建议:给 UIAnnounceMajorEventView.SetContent(StartGame) 补显式判空和上下文日志,至少记录 eventType、SelfPlayerData、GetPlayerInfo 结果、关键 UI 字段和 AudioManager 状态。

3. Animancer 禁用时 Stop 空引用

  • Issuebe8ba33741c7c959e4bff388decf5877
  • 数量3 次,设备数 3
  • 栈:AnimancerState.get_NormalizedTime -> set_Time -> Stop -> AnimancerComponent.OnDisable
  • 判断:早上已有 1 次,下午增长到 3 次。直接问题仍然是对象禁用时 Animancer Stop() 内部状态为空;没有证据指向 YooAsset。
  • 建议:排查带 Animancer 的 UI/角色对象在 disable/destroy 时是否存在空 Clip/State必要时调整 _ActionOnDisable 或在销毁前主动清理状态。

P1 / 高风险非阻断

4. 多语言资源加载为空

  • Issueb176950b03c8f954ad35f9520da10d23f5aa9c0a1411b1f09fd13146d745090d949458f51e04d6cf3f4ff9ee18b7e160bae1cbeda505602c5dbbc984c0fa1d88
  • 数量10 次,单个 issue 设备数 2-3
  • 日志:[TH1.YooAsset] Loaded null resource: Assets/BundleResources/Export/Multilingual, type=MultilingualData
  • 判断:这已经不是早上的单设备孤例。ResourceLoader 打出这条日志前已经通过 CheckLocationValid,所以不是路径不存在;失败点是 YooAsset handle 里取不到 MultilingualData 对象。结合 6 月 10 日资源转 AB、6 月 11 日多语言进 Hotfix仍应按“AB/manifest/Hotfix 程序集组合不一致或本机包对象不可反序列化”处理。
  • 建议:发布侧强制全量重打 AB 与 Hotfix同步校验 PackageManifestdefaultpackage_assets_bundleresources_export bundle、TH1.Hotfix.dll 一致性;运行时给 Loaded null resource 增加 handle status / LastError / package version / manifest version / hotfix version。

5. 多语言 ID 为空

  • Issue12dcc82a69446ab0f1cb4caf44b0579a115622af2c5f78d14b4e6b900ba1d151b36fb8882dd4aabcf8618737d0ec5a655506094b5e9df26bc4d5fd90349178cbed493d4b6926c3bb5efe569a5db211e3
  • 数量5 次,设备数 5
  • 代码:MultilingualManager.GetMultilingualTextSafe
  • 判断:这是调用方传入空字符串或非法 ID和资源加载为空不是同一个问题。它会造成局部文本缺失但不等同于全局多语言资源加载失败。
  • 建议:下一步按 crash context 抓具体调用栈或加调用方上下文日志,记录传入 idString 和调用 UI。

6. P2P / 大厅连接失败与网络广播失败

  • P2P 连接失败2 个 Issue / 70 次 / 22 设备
  • 网络发送失败11 个 Issue / 22 次 / 22 设备
  • 断线重连/ForceUpdate3 个 Issue / 4 次 / 4 设备
  • 判断:主要集中在 Connection failed - Reason: 1000、应用层拒绝连接、目标不在 lobby、目标没有连接、房主广播失败。它们不是崩溃但数量最高说明联机连接状态与 lobby 成员状态之间仍有较大噪声。
  • 建议:把 SimpleP2P 的连接失败日志从 ERROR 降级或增加聚合限流,同时重点查 SteamLobbyManager 广播前成员列表与 SimpleP2P 连接表不同步的问题。

7. RenderTexture 正在作为 Camera.targetTexture 时被释放

  • Issue3b1873b47fcdc15a0284798ea83be004
  • 数量46 次22 设备
  • 日志:Releasing render texture that is set as Camera.targetTexture!
  • 判断:这是 Unity 引擎级 ERROR通常表示释放 RenderTexture 前没有先从 Camera.targetTexture 解绑定。数量高但没有项目栈。
  • 建议:排查 UI 预览、头像、Wiki/Info 面板、RenderTexture 池化或场景相机目标纹理切换逻辑;释放前统一 camera.targetTexture = null

8. AI 计算死循环保护

  • Issue3e65a3369290cfa41e540f0612aefad5b8f5e42d2f8416ec9ab5e4f260a83b24
  • 数量11 次5 设备
  • 代码:AILogic.StartAILogicAIActionBase
  • 判断:保护日志触发说明 AI 行为树或行动选择仍会进入重复节点/重复 action 场景;不是崩溃,但可能造成回合卡顿或 AI 行为异常。
  • 建议:保留 BTNodeId、重复 action、MapHash、PlayerId按最高频节点复现。

9. 结算卡住兜底

  • Issue5 个 / 5 次 / 5 设备
  • 代码:MatchSettlementStuckGuard.CheckAndRecover
  • 判断:兜底生效代表真实存在 PlayerSettlementGroup 没有被翻成 IsSettlement 的场景,当前保护避免了卡死,但根因仍在结算状态流转。
  • 建议:优先看 Normal 结算、AllSuccessOrFailure、投降/死亡/胜利任务混合状态。

P2 / 继续观察

  • 行动执行玩家不一致:BuyCultureCard 两类3 次 / 3 设备,需要看文化卡购买时 action param 的 PlayerId 与当前执行玩家。
  • STS/OSS 上传失败2 次 / 2 设备,后端 Steam verification 超时或 403影响收集数据上传。
  • UnitRendererMismatchBeforeAction分散在多个单次 issue说明数据层/渲染层单位数量仍会短暂不一致,当前是诊断日志,需和具体 action 合并分析。