minigame-tuanjie-transform-sdk/Editor/PCHighPerformance/TROUBLESHOOTING.md

197 lines
4.9 KiB
Markdown
Raw Normal View History

2026-03-02 17:23:50 +08:00
# PC高性能小游戏 - 问题排查指南
## 🐛 问题1设置面板数据被清空
### 原因
`OnLostFocus()` 时机不对,输入框的值可能还未同步到 `formInputData`
### 解决方案 ✅
已修复:在 `OnSettingsGUI()` 中添加 `GUI.changed` 检测,每次输入时自动保存
```csharp
// OnSettingsGUI() 结尾
if (GUI.changed)
{
SaveData(); // 实时保存
}
```
---
## 🐛 问题2ShowInfo 逻辑未执行
### 可能原因
#### 1. DLL 未找到 (最常见 90%)
**症状**:运行 .exe 后没有任何弹窗
**原因**`direct_applet_sdk.dll` 不在 .exe 同级目录
**验证**
```bash
# 检查导出目录结构
导出路径/
├── YourGame.exe
├── direct_applet_sdk.dll ← 必须存在
└── YourGame_Data/
```
**解决**
- 确保 DLL 在运行时根目录
- 查看 Unity Player.log
- Windows: `%APPDATA%\..\LocalLow\<CompanyName>\<ProductName>\Player.log`
- 搜索关键字: `[EmbeddedAppletSDK]``DllNotFoundException`
---
#### 2. GameObject 未注入 (10%)
**症状**:构建后场景中没有 `EmbeddedAppletSDK` 对象
**验证**:使用调试工具
```
Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态
```
**可能的问题**
- ❌ Build Settings 中没有启用场景
- ❌ 构建前 `PCHPBuildPreProcessor` 未执行
- ❌ 脚本编译错误导致组件未挂载
**解决**
1. 确保 Build Settings 有至少一个启用场景
2. 查看 Console 日志:
```
[PC高性能小游戏] 开始预处理构建...
[PC高性能小游戏] 已在 XXX 中创建 SDK 对象并添加组件
```
---
#### 3. MessageBox 被禁用 (少见 <5%)
**症状**:有日志输出但没有弹窗
**验证**
- 查看 Unity Editor Console 是否有 `[EmbeddedAppletSDK]` 日志
- 运行 .exe 时查看 Player.log
**临时禁用弹窗**(调试用):
```csharp
// 修改 Templates/EmbeddedAppletSDK.cs
private void ShowInfo(string message)
{
Debug.Log($"[EmbeddedAppletSDK] {message}");
// MessageBox(IntPtr.Zero, message, "Info", 0x40); // 注释掉
}
```
---
## 🔍 调试步骤(按顺序)
### Step 1: 检查 SDK 注入状态
```
Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态
```
✅ 正常输出示例:
```
[构建场景] 启用的场景数: 1
✅ 首场景: Assets/Scenes/Main.unity
✅ 找到 SDK GameObject: EmbeddedAppletSDK
✅ 挂载的脚本: EmbeddedAppletSDK
[脚本文件检查]
✅ 用户项目中存在 EmbeddedAppletSDK.cs
[类型加载检查]
✅ EmbeddedAppletSDK 类型已加载
```
---
### Step 2: 检查导出路径
```
Unity 菜单 → 微信小游戏 → PC高性能调试 → 查看导出路径
```
确认:
- ✅ 目录存在
- ✅ 有 .exe 文件
---
### Step 3: 运行 .exe 并查看日志
**日志位置**
```
Windows: %APPDATA%\..\LocalLow\YourCompany\YourProduct\Player.log
Mac: ~/Library/Logs/Company Name/Product Name/Player.log
```
**搜索关键字**
```
[EmbeddedAppletSDK]
DllNotFoundException
InitEmbeddedGameSDK
```
**正常日志**
```
[EmbeddedAppletSDK] ========== Awake 被调用 ==========
[EmbeddedAppletSDK] GameObject 名称: EmbeddedAppletSDK
[EmbeddedAppletSDK] ========== 开始初始化 ==========
[EmbeddedAppletSDK] 当前工作目录: C:\...\YourBuild
[EmbeddedAppletSDK] Step 1: 调用 InitEmbeddedGameSDK
[EmbeddedAppletSDK] InitEmbeddedGameSDK 成功
...
```
**异常日志**
```
DllNotFoundException: Unable to load DLL 'direct_applet_sdk.dll'
→ 解决: 复制 DLL 到 .exe 同级目录
```
---
## 📝 快速检查清单
- [ ] Build Settings 中有启用的场景
- [ ] 构建时 Console 有 `[PC高性能小游戏] 预处理完成!` 日志
- [ ] 导出目录包含 `.exe``direct_applet_sdk.dll`
- [ ] 运行 .exe 后有弹窗或 Player.log 有日志
---
## 🛠️ 调试工具菜单
| 菜单项 | 功能 |
|--------|------|
| 检查SDK注入状态 | 验证场景中是否有 SDK 对象和脚本 |
| 查看导出路径 | 显示配置的导出路径和状态 |
| 打开导出目录 | 在文件管理器中打开导出目录 |
---
## 💡 常见错误代码
| 错误信息 | 原因 | 解决方法 |
|----------|------|----------|
| `DllNotFoundException` | DLL 未找到 | 复制 DLL 到 .exe 同级目录 |
| `EntryPointNotFoundException` | 函数不存在 | 检查 DLL 版本是否匹配 |
| `找不到 EmbeddedAppletSDK 类型` | 脚本未编译 | 检查编译错误或重新导入 |
| `GetActiveWindow 返回空句柄` | 窗口未创建 | 延迟初始化或检查 Unity Player 设置 |
---
## 🚀 最小验证示例
创建一个最简单的测试场景:
1. **创建新场景** `TestSDK.unity`
2. **添加到 Build Settings** 并设为首场景
3. **构建一次** → 应该自动注入 SDK
4. **检查场景** → 应该有 `EmbeddedAppletSDK` GameObject
5. **运行 .exe**(确保 DLL 存在)→ 应该有弹窗
如果这个流程失败,提供 Console 和 Player.log 完整日志。