切iosskill

This commit is contained in:
wuwenbo 2026-06-09 15:00:13 +08:00
parent 7b5eb3a508
commit c601ddfe83
5 changed files with 451 additions and 0 deletions

View File

@ -0,0 +1,244 @@
---
name: th1-ios-migration
description: "TH1 project-specific iOS migration guide for same-mainline dual-platform support: HybridCLR hot update foundation, iOS/IL2CPP compile isolation, Steamworks/Steam SDK platform abstraction without Steam regressions, touch input adaptation, YooAsset AssetBundle/resource migration, iOS build settings, and verification that existing online Steam builds and gameplay behavior remain unaffected. Use whenever Codex works on TH1 iOS packaging, mobile porting, HybridCLR, YooAsset AB/resource loading, removing direct Steamworks references for iOS, platform services, touch controls, or build pipeline changes that must preserve the current Steam version."
---
# TH1 iOS Migration
## Core Rule
TH1 iOS migration is same-mainline dual-platform work. Do not create a long-lived Steam code line and a separate mobile code line.
Every change must preserve the existing Steam build and gameplay behavior while adding iOS support through platform-specific implementations, build defines, asmdef/platform settings, and no-op/mobile services.
Default target shape:
- Shared gameplay, action logic, AI, `MapData`, config, save data, and localization stay common.
- Steam SDK, Steam lobby/P2P, Workshop, Steam auth, and Steam-specific UI live behind Steam-only platform boundaries.
- iOS gets IL2CPP/AOT-compatible code, mobile/no-op platform services, touch input, and platform-specific resources.
- Steam and iOS may have separate build profiles, resource bundles, and release branches, but not divergent business logic.
## First Reads
Read the relevant files before editing:
- `MD/GameMDFramework/00-主文档-游戏架构总览.md`
- `MD/GameMDFramework/11-网络与Steam.md`
- `MD/GameMDFramework/13-配置与数据资产.md`
- `Unity/Packages/manifest.json`
- `Unity/ProjectSettings/ProjectSettings.asset`
- `Unity/Assets/Scripts/TH1_Logic/Core/Main.cs`
- `Unity/Assets/Scripts/TH1_Logic/Net/ILobby.cs`
- `Unity/Assets/Scripts/TH1_Logic/Net/LobbyManager.cs`
- `Unity/Assets/Scripts/TH1_Logic/Steam/SteamLobbyManager.cs`
- `Unity/Assets/com.rlabrecque.steamworks.net/Runtime/com.rlabrecque.steamworks.net.asmdef`
- `Unity/Assets/Scripts/TH1_Logic/Input/InputLogic.cs`
- `Unity/Assets/Scripts/TH1_UI/CameraController.cs`
- `Unity/Assets/Scripts/TH1_UI/View/Base/View.cs`
- `Unity/Assets/Scripts/TH1_Logic/Rersource/ResourceManager.cs`
- `Unity/Assets/AssetBundleCollectorSetting.asset`
- `Unity/Assets/Scripts/TH1_Resource/ResourceCache.cs`
- `Unity/Assets/Scripts/TH1_Logic/Config/ConfigManager.cs`
Also use:
- `th1-network-sync` when touching lobby, P2P, `GameNetSender`, `GameNetReceiver`, `NetData`, action sync, reconnect, or multiplayer start/resume.
- `th1-action-logic` when changing authoritative gameplay, action execution, AI action flow, replay, or deterministic behavior.
- `th1-multilingual` when changing Workshop/local mod language loading or localization resources.
- `th1-server-backend` when replacing Steam auth, STS, OSS upload, bug report upload, or backend identity.
## Migration Order
Use this order unless the user explicitly changes it:
1. Add HybridCLR foundation.
2. Clean iOS compile isolation and Steam platform boundaries.
3. Add touch/mobile input adaptation.
4. Migrate resources to YooAsset AssetBundle flow.
5. Add automated Steam/iOS build and hot-update packaging verification.
Do not use AB/YooAsset migration as a way to hide platform compile errors. iOS compile isolation must become clean before large resource replacement.
## Phase 0: Baseline And Steam Parity Contract
Before editing:
- Run `git status --short` and preserve unrelated user changes.
- Search direct platform dependencies with `rg -n "using Steamworks|SteamUser|SteamFriends|SteamUtils|SteamUGC|SteamAPI|SteamManager|TH1_Logic\\.Steam|UNITY_IOS|STEAM_CHANNEL|Resources\\.Load|Input\\.Get|mousePosition|safeArea" Unity/Assets/Scripts`.
- Identify whether the change is platform boundary, hotfix assembly layout, touch input, resource loading, backend auth, or build settings.
- Write down which Steam behavior must remain identical: lobby, P2P, Workshop, achievements, bug report upload, OSS collect upload, config/save, UI visibility, and multiplayer action sync.
Steam parity rules:
- Do not delete Steamworks.NET or Steam-specific scripts as part of iOS migration.
- Do not remove `STEAM_CHANNEL` behavior for Standalone.
- Do not change multiplayer state machines unless the task is explicitly network work and `th1-network-sync` is active.
- Do not move authoritative action logic into hotfix assemblies unless the user explicitly accepts the extra deterministic and replay risk.
- Do not modify obfuscation, MemoryPack compatibility, or generated config outputs without repeated explicit confirmation from the user.
## Phase 1: HybridCLR Foundation
Goal: create a hot-update pipeline without changing Steam gameplay.
Preferred first scope:
- Add HybridCLR package/config/build steps.
- Create hotfix assembly boundaries such as `TH1.Hotfix` only after deciding what belongs there.
- Keep authoritative turn/action/AI/network contracts in AOT main assemblies at first.
- Put low-risk UI, presentation helpers, non-networked bug fixes, or feature flags into hotfix first.
- Generate and commit required AOT metadata/link preservation files only through the documented HybridCLR workflow.
- Ensure the Steam build can still run without downloading any hotfix package when using local/editor mode.
iOS constraints:
- iOS is IL2CPP/AOT. Assume reflection, generic sharing, MemoryPack formatters, and dynamically referenced types can be stripped unless preserved.
- Treat code hot update on iOS as sensitive. Do not present it as a way to bypass App Store review. Prefer resources/configs for content updates and use code hotfix cautiously.
- Keep a rollback path: base app version, hotfix manifest version, minimum compatible app version, and ability to ignore bad hotfix packages.
Checks:
- Steam Standalone compile still succeeds.
- iOS IL2CPP compile reaches the next real blocker.
- Hotfix assembly does not reference Steamworks or editor-only assemblies.
- `link.xml`/preserve additions are minimal and justified.
## Phase 2: iOS Compile Isolation And Steam Boundary
Goal: iOS compiles without Steamworks types while Steam keeps full behavior.
Preferred pattern:
- Move platform-neutral DTOs out of `TH1_Logic.Steam` into `TH1_Logic.Net` or a platform-neutral namespace before sharing them through `ILobby`.
- Make `ILobby` and shared UI/data contracts free of `Steamworks` types.
- Keep `SteamLobbyManager`, `SimpleP2P`, `GameNetSender`, `GameNetReceiver`, Workshop browser/uploader, and Steam auth under Steam-only compile/platform boundaries.
- Add mobile/no-op implementations for services iOS cannot use yet.
- Hide or disable unsupported iOS UI entries instead of leaving clickable failing paths.
Use platform services for direct SDK access:
- `IPlatformUser`: user id, display name, login state.
- `IPlatformLobby`/existing `ILobby`: lobby/multiplayer operations.
- `IPlatformAchievement`: local/Steam/Game Center achievements.
- `IPlatformWorkshop` or local mod service: Workshop and local mod separation.
- `IPlatformAuth`: Steam ticket, Game Center/apple/backend/anonymous auth.
- `IPlatformBackendUpload`: OSS/bug report/collect upload routing.
Compile guard guidance:
- Prefer asmdef include platforms and service implementations over scattered `#if`.
- Use `#if STEAM_CHANNEL || UNITY_STANDALONE` only around Steam-specific code, not around shared gameplay.
- Do not make `UNITY_EDITOR` automatically mean Steam behavior if that blocks iOS simulation or mobile service testing in editor.
- Keep editor-only tooling under editor asmdefs or `#if UNITY_EDITOR`.
Checks:
- `rg -n "using Steamworks|SteamUser|SteamFriends|SteamUtils|SteamUGC|SteamAPI|SteamManager" Unity/Assets/Scripts -g '!Steamworks.NET/**'` should show only Steam-only files or files guarded out of iOS.
- `LobbyManager` selects Steam for Steam builds and no-op/mobile for iOS.
- iOS build does not compile against the Steamworks.NET asmdef.
- Steam multiplayer, Workshop, and Steam upload paths are unchanged or covered by explicit parity tests.
## Phase 3: Touch And Mobile Input
Goal: single-player iOS is playable without keyboard/mouse.
Touch work is a UX layer, not a gameplay mutation layer:
- Do not bypass action construction or `CheckCan`/`CompleteExecute`.
- Convert tap/drag/pinch/cancel/confirm into the same input/action intentions used by existing UI and `InputLogic`.
- Keep keyboard/mouse shortcuts working on Steam.
- Add touch-specific affordances when keyboard shortcuts previously exposed required commands.
Minimum iOS control coverage:
- Tap grid/unit/city selection.
- Tap action buttons and confirm/cancel flows.
- Drag camera.
- Pinch zoom replacing mouse wheel.
- Long press or explicit UI button for right-click/cancel-equivalent actions.
- Safe area handling for top/bottom UI.
- ScrollRect feel and button target size on touch.
Checks:
- Single-player start, select civ/force, generate map, move unit, attack, build/train, end turn, save/load, and finish game remain possible on touch.
- Steam keyboard/mouse behavior is not removed.
- UI text and buttons fit common iPhone and iPad aspect ratios.
## Phase 4: YooAsset AssetBundle Flow
Goal: move toward AB/resource hot update without destabilizing the Steam build.
Use the existing YooAsset package and `AssetBundleCollectorSetting.asset` unless there is a clear reason not to.
Recommended sequence:
1. Finish a real `ResourceManager` wrapper around YooAsset package initialization.
2. Start with `OfflinePlayMode` so resources are packaged with the app.
3. Add platform-specific package build output: Standalone and iOS must produce separate bundles.
4. Move high-value resource groups first: UI prefabs, common sprites, audio, config data assets, large visual assets.
5. Replace `Resources.Load` through local resource/cache entrypoints, not scattered direct YooAsset calls.
6. Only after Offline is stable, add `HostPlayMode` for CDN/OSS remote resource update.
Resource rules:
- Keep stable logical addresses. Do not make gameplay code depend on platform-specific paths.
- Do not modify export-flow outputs such as `Unity/Assets/Resources/Export/*`, `Tools/Multilingual.xlsx`, or `Tools/MultilingualTxt.txt` unless the user asked for export/import changes.
- Use iOS-specific texture/audio compression settings and bundle output. Do not reuse PC texture assumptions blindly.
- Treat generated config/DataAsset loading as compatibility-sensitive; preserve existing table and localization behavior.
Checks:
- Steam package can still load existing resources in editor and standalone.
- iOS package uses iOS bundles and does not load PC-only bundle variants.
- Missing asset failures are logged with package/address/platform.
- No synchronous remote download is required during deterministic action execution.
## Phase 5: Build Pipeline And Release Discipline
Maintain one main branch with separate build profiles:
- Steam build: Standalone, `STEAM_CHANNEL`, Steamworks.NET, Steam lobby/P2P, Workshop, Steam auth/upload.
- iOS build: iOS, IL2CPP, mobile platform services, no Steamworks compile dependency, touch enabled, iOS bundles.
- Hot update build: platform-specific HybridCLR DLL/AOT metadata and YooAsset manifests.
Release branches may exist for stabilization only:
- `release/steam-*` and `release/ios-*` may freeze and cherry-pick fixes.
- All durable business logic fixes should return to the shared mainline.
- Avoid copy-pasted Steam/mobile variants of gameplay classes.
## Verification
For ordinary C# changes run:
```powershell
dotnet build Unity/Assembly-CSharp.csproj --no-restore
```
For editor/build pipeline/resource tooling changes also run:
```powershell
dotnet build Unity/Assembly-CSharp-Editor.csproj --no-restore
```
Also verify the relevant Unity builds when possible:
- Steam Editor/Standalone smoke test.
- iOS switch-platform compile or Xcode export.
- HybridCLR generate/compile hotfix artifacts.
- YooAsset build for the touched package/platform.
Manual smoke checklist:
- Steam: start game, create/join lobby if network touched, Workshop/mod page if Workshop touched, bug report/upload if backend touched.
- iOS/mobile: launch, start single-player, touch select/move/action/end turn, save/load, rotate/aspect/safe area check.
- Shared: config load/save, localization, achievements/local progress, no hardcoded game-facing text added.
## Stop Conditions
Stop and ask before continuing if:
- A change would require editing MemoryPack serialization compatibility, obfuscation config, generated config outputs, or Steam backend auth contracts.
- The only easy path is duplicating gameplay code between Steam and iOS.
- iOS support would require removing or weakening existing Steam multiplayer guarantees.
- A hotfix assembly needs to own authoritative action/network/replay logic before the migration baseline is stable.

View File

@ -0,0 +1,4 @@
interface:
display_name: "TH1 iOS Migration"
short_description: "HybridCLR, iOS isolation, touch, YooAsset"
default_prompt: "Use $th1-ios-migration when making TH1 iOS migration changes that must keep the Steam build and existing gameplay behavior intact."

View File

@ -0,0 +1,34 @@
# CrashSight 0.7.3e 最近一天 ERROR 分析
- 捕获时间2026-06-09 10:58:01
- 筛选范围:`0.7.3e``last_1_day`ERROR未处理/处理中
- CrashSight numFound23
- 去重 Issue23
- blocking0 个 Issue0 次
- logerror23 个 Issue51 次
- 原始数据:`Temp\CrashSight\Daily_2026-06-09_0.7.3e`
## 阻断家族
未发现包含真实异常对象/栈的 blocking Issue。
## 非阻断高频
| 类别 | Issue 数 | 次数 |
|---|---:|---:|
| P2P/大厅连接失败诊断 | 2 | 22 |
| 多语言 ID 为空 | 2 | 6 |
| 网络发送失败诊断 | 6 | 6 |
| AI 计算死循环保护 | 2 | 4 |
| STS/OSS 上传失败诊断 | 2 | 4 |
| 其他项目诊断日志 | 4 | 4 |
| 相似 Action 重复诊断 | 4 | 4 |
| 受击生命周期格子为空诊断 | 1 | 1 |
## 报告
- [LogError Summary](logerror_summary.md)
## 说明
blocking 的判定只认真实异常类型、异常对象或调用栈;纯 `LogSystem.LogError` 业务状态诊断归入 logerror。

View File

@ -0,0 +1,47 @@
# LogError Summary
- 筛选范围:`0.7.3e``last_1_day`ERRORstatus `0,2`
- 捕获时间2026-06-09 10:58:01
- 非阻断 Issue23
- 非阻断次数51
## 分类汇总
| 类别 | Issue 数 | 次数 | 设备数 | 代码位置 | 示例 Issue |
|---|---:|---:|---:|---|---|
| P2P/大厅连接失败诊断 | 2 | 22 | 8 | Unity/Assets/Scripts\TH1_Logic\Steam\SimpleP2P.cs:479: LogSystem.LogError($"Connection failed - Reason: {endReason}"); | 01eaa6aefd9162eccc930c2450a63779, 9b415b4bbb546c66eba3a6b67f916d35 |
| 多语言 ID 为空 | 2 | 6 | 6 | Unity/Assets/Scripts\TH1_Logic\Multilingual\MultilingualManager.cs:176: LogSystem.LogError($"多语言ID为空");<br>Unity/Assets/Scripts\TH1_Logic\Multilingual\MultilingualManager.cs:200: LogSystem.LogError($"多语言ID为空"); | f5d6caefc1e5ac72cd5c21a56e3dfddb, 691253c2a412f07945231dd650f58213 |
| 网络发送失败诊断 | 6 | 6 | 6 | Unity/Assets/Scripts\TH1_Logic\Action\ActionLogic.cs:1230: LogSystem.LogError($"ActionConfirm send failed, abort local execute: {ActionId.GetStringLog()}"); | dbce2880e5ad9287fcca2bf271f97622, 81a5e2896daabc7005cd79ae522de4bf, 2cb3d67ddfe0d9587abd02390f5de041 |
| AI 计算死循环保护 | 2 | 4 | 4 | Unity/Assets/Scripts\TH1_Logic\AI\AILogic.cs:179: LogSystem.LogError($"死循环了,最终记录点为:{MainEditor.Instance.BTNodeId}");<br>Unity/Assets/Scripts\TH1_Logic\AI\AIActionBase.cs:528: LogSystem.LogError($"死循环了"); | bb81bce180d8672f500aa9f2021ec9f8, 83c5b5b46447ac4e50101f1148f4ab70 |
| STS/OSS 上传失败诊断 | 2 | 4 | 4 | Unity/Assets/Scripts\TH1_Logic\Oss\OssManager.cs:124: LogSystem.LogError($"CollectData upload failed: {ex.Message}"); | 4519111d864a8906a22e97fb6b1dafde, 93509b23a954c79d835f4138bab9f3f7 |
| 其他项目诊断日志 | 4 | 4 | 4 | 未直接定位 | dc8a0a12922d2ba2cd2b232774f909fb, 786bc4b518cd1e0cdb1e4f0b134573b8, 94c57a8beeeb7a5d974d168da2b55836 |
| 相似 Action 重复诊断 | 4 | 4 | 4 | Unity/Assets/Scripts\TH1_Logic\AI\AILogic.cs:230: if(_sameCount > 5) LogSystem.LogError($"存在相似action ,记录点为:{MainEditor.Instance.BTNodeId} ," + | eef2a9c6d58f5454cecf029ffc2438d3, 284527635e39660c5430a3fe6170231a, f76a1c7293c1f7361bf9545b93892bdb |
| 受击生命周期格子为空诊断 | 1 | 1 | 1 | Unity/Assets/Scripts\TH1_Logic\Skill\AllSkill\SatoriSeeSkill.cs:45: LogSystem.LogError($"BeforeUnitDamaged Error selfGrid : {selfGrid}, targetGrid : {targetGrid}"); | fec6b9b264a6c8b1fa5ac0591bdf3b41 |
## 明细
| Issue | 类别 | 类型 | 次数 | 设备 | 最近上报 | 消息 |
|---|---|---|---:|---:|---|---|
| [9b415b4bbb546c66eba3a6b67f916d35](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/9b415b4bbb546c66eba3a6b67f916d35?pid=10) | P2P/大厅连接失败诊断 | UnityLogError | 14 | 3 | 2026-06-09 10:22:16 | 应用层拒绝连接 - 错误码: 1000可能原因1.对方未创建监听套接字 2.对方主动拒绝 3.对方游戏未运行 |
| [01eaa6aefd9162eccc930c2450a63779](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/01eaa6aefd9162eccc930c2450a63779?pid=10) | P2P/大厅连接失败诊断 | UnityLogError | 8 | 5 | 2026-06-09 10:35:21 | Connection failed - Reason: 1000 |
| [691253c2a412f07945231dd650f58213](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/691253c2a412f07945231dd650f58213?pid=10) | 多语言 ID 为空 | UnityLogError | 3 | 3 | 2026-06-09 08:11:36 | 多语言ID为空 |
| [bb81bce180d8672f500aa9f2021ec9f8](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/bb81bce180d8672f500aa9f2021ec9f8?pid=10) | AI 计算死循环保护 | UnityLogError | 3 | 3 | 2026-06-09 09:49:28 | 死循环了 |
| [f5d6caefc1e5ac72cd5c21a56e3dfddb](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/f5d6caefc1e5ac72cd5c21a56e3dfddb?pid=10) | 多语言 ID 为空 | UnityLogError | 3 | 3 | 2026-06-09 08:11:37 | 多语言ID为空 |
| [4519111d864a8906a22e97fb6b1dafde](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/4519111d864a8906a22e97fb6b1dafde?pid=10) | STS/OSS 上传失败诊断 | UnityLogError | 2 | 2 | 2026-06-09 10:27:52 | CollectData upload failed: STS request failed: HTTP/1.1 403 Forbidden |
| [93509b23a954c79d835f4138bab9f3f7](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/93509b23a954c79d835f4138bab9f3f7?pid=10) | STS/OSS 上传失败诊断 | UnityLogError | 2 | 2 | 2026-06-09 10:27:50 | STS request failed: HTTP/1.1 403 Forbidden, Response: {"error":"Steam verification failed: Steam API 请求失败(重试 2 次): Steam API 请求超时8000ms"} |
| [1d2092e8267a158d39aa1a040041020d](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/1d2092e8267a158d39aa1a040041020d?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:27:06 | P2P broadcast preflight failed: target=76561199140125537, reason=No connection to 76561199140125537 |
| [284527635e39660c5430a3fe6170231a](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/284527635e39660c5430a3fe6170231a?pid=10) | 相似 Action 重复诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:22:07 | 存在相似action ,记录点为:743 ,Action为:Action : LearnTech Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : None UnitAction : None CityLevelUpAction : None CityAction : None GridMiscAction : None Skill : NONE Tech : Aquatism PlayerAction : None AIParam : AllClear Tech : Aquatism CultureCardType : None 重复次数 :6 |
| [2cb3d67ddfe0d9587abd02390f5de041](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/2cb3d67ddfe0d9587abd02390f5de041?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:27:09 | ij: 房主广播失败 |
| [4628d34f3d350cc5201a4b0061d92890](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/4628d34f3d350cc5201a4b0061d92890?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 09:47:47 | epn: 发送给房主失败 |
| [4b42e043c64194e31205b4fa1a9b4d2d](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/4b42e043c64194e31205b4fa1a9b4d2d?pid=10) | 相似 Action 重复诊断 | UnityLogError | 1 | 1 | 2026-06-09 02:19:12 | 存在相似action ,记录点为:743 ,Action为:Action : LearnTech Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : None UnitAction : None CityLevelUpAction : None CityAction : None GridMiscAction : None Skill : NONE Tech : KomeijiIndianNavigation PlayerAction : None AIParam : AllClear Tech : KomeijiIndianNavigation CultureCar… |
| [786bc4b518cd1e0cdb1e4f0b134573b8](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/786bc4b518cd1e0cdb1e4f0b134573b8?pid=10) | 其他项目诊断日志 | UnityLogError | 1 | 1 | 2026-06-09 03:45:07 | [UnitRendererMismatchBeforeAction] 数据层Unit与渲染层Unit不一致 MapId=3718009707, ActionIndex=753, DataUnits=10, RenderUnits=11, RenderOnly=1, DataOnly=0 PrevActions(count=2): PrevAction[752]: Version=752, MapHash=b3c222fb7630a79e12bd026e1acc5c2a Action : UnitAttackAlly Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : … |
| [81a5e2896daabc7005cd79ae522de4bf](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/81a5e2896daabc7005cd79ae522de4bf?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:27:13 | P2P broadcast preflight failed: target=76561199481856121, reason=Target is not a lobby peer: 76561199481856121 |
| [83c5b5b46447ac4e50101f1148f4ab70](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/83c5b5b46447ac4e50101f1148f4ab70?pid=10) | AI 计算死循环保护 | UnityLogError | 1 | 1 | 2026-06-09 07:18:07 | 死循环了,最终记录点为:194 |
| [94c57a8beeeb7a5d974d168da2b55836](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/94c57a8beeeb7a5d974d168da2b55836?pid=10) | 其他项目诊断日志 | UnityLogError | 1 | 1 | 2026-06-09 02:16:47 | AddUnitData blocked: target grid occupied. gid=29, cid=132, newUnit=Warrior/None/0, existingUnitId=134, existingUnit=Giant/IndianKoishi/1, mapId=1420962692 |
| [9710b2a3ce8de361e2e1d64f357e1c53](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/9710b2a3ce8de361e2e1d64f357e1c53?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 09:47:46 | P2P message send failed: target=76561198078001233, reason=Connection to 76561198078001233 is not active for queueing. State: k_ESteamNetworkingConnectionState_ClosedByPeer, bytes: 36 |
| [a4a999b4713d79384b69e705f9ea432b](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/a4a999b4713d79384b69e705f9ea432b?pid=10) | 其他项目诊断日志 | UnityLogError | 1 | 1 | 2026-06-09 01:46:19 | 房间人数超过玩家槽位数量: member=76561199140125537, playerCount=4 |
| [dbce2880e5ad9287fcca2bf271f97622](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/dbce2880e5ad9287fcca2bf271f97622?pid=10) | 网络发送失败诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:27:15 | ij: 房主广播失败 |
| [dc8a0a12922d2ba2cd2b232774f909fb](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/dc8a0a12922d2ba2cd2b232774f909fb?pid=10) | 其他项目诊断日志 | UnityLogError | 1 | 1 | 2026-06-09 10:31:15 | [UnitRendererMismatchBeforeAction] 数据层Unit与渲染层Unit不一致 MapId=3469557537, ActionIndex=478, DataUnits=41, RenderUnits=42, RenderOnly=1, DataOnly=0 PrevActions(count=2): PrevAction[477]: Version=477, MapHash=d4f1de5674640aa2ed385ef3664e40fe Action : UnitAttack Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : None… |
| [eef2a9c6d58f5454cecf029ffc2438d3](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/eef2a9c6d58f5454cecf029ffc2438d3?pid=10) | 相似 Action 重复诊断 | UnityLogError | 1 | 1 | 2026-06-09 10:28:57 | 存在相似action ,记录点为:716 ,Action为:Action : LearnTech Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : None UnitAction : None CityLevelUpAction : None CityAction : None GridMiscAction : None Skill : NONE Tech : Strategy PlayerAction : None AIParam : AllClear Tech : Strategy CultureCardType : None 重复次数 :7 |
| [f76a1c7293c1f7361bf9545b93892bdb](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/f76a1c7293c1f7361bf9545b93892bdb?pid=10) | 相似 Action 重复诊断 | UnityLogError | 1 | 1 | 2026-06-09 05:35:33 | 存在相似action ,记录点为:756 ,Action为:Action : LearnTech Wonder : None Resource : None Feature : None Terrain : None Unit : None Giant : None Vegetation : None UnitAction : None CityLevelUpAction : None CityAction : None GridMiscAction : None Skill : NONE Tech : KanakoChivalry PlayerAction : None AIParam : AllClear Tech : KanakoChivalry CultureCardType : None 重复次数 … |
| [fec6b9b264a6c8b1fa5ac0591bdf3b41](https://crashsight.qq.com/crash-reporting/errors/01076c49ce/fec6b9b264a6c8b1fa5ac0591bdf3b41?pid=10) | 受击生命周期格子为空诊断 | UnityLogError | 1 | 1 | 2026-06-09 03:01:26 | BeforeUnitDamaged Error selfGrid : bsr, targetGrid : |

View File

@ -0,0 +1,122 @@
{
"date": "2026-06-09",
"version": "0.7.3e",
"capture": {
"capturedAtUtc": "2026-06-09T02:58:01+00:00",
"capturedAtLocal": "2026-06-09 10:58:01",
"rawDir": "Temp\\CrashSight\\Daily_2026-06-09_0.7.3e",
"reportDir": "MD\\CrashSight_2026-06-09_0.7.3e_1day"
},
"filter": {
"version": "0.7.3e",
"date": "last_1_day",
"status": "0,2",
"exceptionCategoryList": "ERROR",
"sortField": "uploadTime",
"sortOrder": "desc",
"rows": 100
},
"totalIssues": 23,
"blockingIssues": 0,
"blockingOccurrences": 0,
"logerrorIssues": 23,
"logerrorOccurrences": 51,
"blockingReports": [],
"categories": [
{
"id": "p2p-lobby-connection-failure",
"title": "P2P/大厅连接失败诊断",
"class": "logerror",
"issueCount": 2,
"occurrences": 22,
"issues": [
"01eaa6aefd9162eccc930c2450a63779",
"9b415b4bbb546c66eba3a6b67f916d35"
]
},
{
"id": "multilingual-empty-id",
"title": "多语言 ID 为空",
"class": "logerror",
"issueCount": 2,
"occurrences": 6,
"issues": [
"f5d6caefc1e5ac72cd5c21a56e3dfddb",
"691253c2a412f07945231dd650f58213"
]
},
{
"id": "network-send-failure",
"title": "网络发送失败诊断",
"class": "logerror",
"issueCount": 6,
"occurrences": 6,
"issues": [
"dbce2880e5ad9287fcca2bf271f97622",
"81a5e2896daabc7005cd79ae522de4bf",
"2cb3d67ddfe0d9587abd02390f5de041",
"1d2092e8267a158d39aa1a040041020d",
"4628d34f3d350cc5201a4b0061d92890",
"9710b2a3ce8de361e2e1d64f357e1c53"
]
},
{
"id": "ai-loop-guard",
"title": "AI 计算死循环保护",
"class": "logerror",
"issueCount": 2,
"occurrences": 4,
"issues": [
"bb81bce180d8672f500aa9f2021ec9f8",
"83c5b5b46447ac4e50101f1148f4ab70"
]
},
{
"id": "sts-upload-failure",
"title": "STS/OSS 上传失败诊断",
"class": "logerror",
"issueCount": 2,
"occurrences": 4,
"issues": [
"4519111d864a8906a22e97fb6b1dafde",
"93509b23a954c79d835f4138bab9f3f7"
]
},
{
"id": "other-logerror",
"title": "其他项目诊断日志",
"class": "logerror",
"issueCount": 4,
"occurrences": 4,
"issues": [
"dc8a0a12922d2ba2cd2b232774f909fb",
"786bc4b518cd1e0cdb1e4f0b134573b8",
"94c57a8beeeb7a5d974d168da2b55836",
"a4a999b4713d79384b69e705f9ea432b"
]
},
{
"id": "duplicate-similar-action",
"title": "相似 Action 重复诊断",
"class": "logerror",
"issueCount": 4,
"occurrences": 4,
"issues": [
"eef2a9c6d58f5454cecf029ffc2438d3",
"284527635e39660c5430a3fe6170231a",
"f76a1c7293c1f7361bf9545b93892bdb",
"4b42e043c64194e31205b4fa1a9b4d2d"
]
},
{
"id": "damage-grid-null-diagnostic",
"title": "受击生命周期格子为空诊断",
"class": "logerror",
"issueCount": 1,
"occurrences": 1,
"issues": [
"fec6b9b264a6c8b1fa5ac0591bdf3b41"
]
}
]
}