Auto-publish.

This commit is contained in:
nebulaliu 2026-03-02 19:15:34 +08:00
parent aa7d08b666
commit 42ec57080c
174 changed files with 672 additions and 322 deletions

View File

@ -9,19 +9,28 @@ namespace WeChatWASM
{
/// <summary>
/// PC高性能小游戏构建预处理器
/// 负责在构建前向首场景注入 EmbeddedAppletSDK
/// 负责在构建前向首场景注入 WXPCHPInitScript
/// </summary>
public class PCHPBuildPreProcessor : IPreprocessBuildWithReport
{
// SDK 脚本名称常量
private const string SDK_CLASS_NAME = "WeChatWASM.WXPCHPInitScript";
private const string SDK_GAMEOBJECT_NAME = "WXPCHPInitScript";
public int callbackOrder => 0;
public void OnPreprocessBuild(BuildReport report)
{
Debug.Log("========================================");
Debug.Log("[PC高性能小游戏] PCHPBuildPreProcessor.OnPreprocessBuild 被调用");
Debug.Log("========================================");
// 只处理 Windows/Mac Standalone 构建
var buildTarget = report.summary.platform;
if (buildTarget != BuildTarget.StandaloneWindows64 &&
buildTarget != BuildTarget.StandaloneOSX)
{
Debug.LogWarning($"[PC高性能小游戏] 当前平台 {buildTarget} 不是 Windows/Mac跳过预处理");
return;
}
@ -29,62 +38,55 @@ namespace WeChatWASM
try
{
// 1. 确保用户项目中有 EmbeddedAppletSDK 脚本(可选)
Debug.Log("[PC高性能小游戏] → 步骤1: 检查 WXPCHPInitScript 脚本是否存在");
EnsureSDKScriptExists();
// 2. 向首场景注入 SDK GameObject
Debug.Log("[PC高性能小游戏] → 步骤2: 向首场景注入 SDK GameObject");
InjectSDKToFirstScene();
Debug.Log("[PC高性能小游戏] 预处理完成!");
Debug.Log("[PC高性能小游戏] 预处理完成!");
}
catch (System.Exception e)
{
Debug.LogError($"[PC高性能小游戏] 预处理失败: {e.Message}\n{e.StackTrace}");
Debug.LogError("========================================");
Debug.LogError($"[PC高性能小游戏] ❌ 预处理失败: {e.Message}\n{e.StackTrace}");
Debug.LogError("========================================");
throw;
}
}
/// <summary>
/// 确保用户项目中存在 EmbeddedAppletSDK.cs 脚本
/// 如果不存在,从模板复制
/// 在所有程序集中查找类型
/// </summary>
private System.Type FindTypeInAllAssemblies(string typeName)
{
foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies())
{
var type = assembly.GetType(typeName);
if (type != null)
{
return type;
}
}
return null;
}
/// <summary>
/// 确保 WXPCHPInitScript 脚本存在
/// </summary>
private void EnsureSDKScriptExists()
{
// 检查用户项目中是否已有脚本
var sdkType = System.Type.GetType("EmbeddedAppletSDK");
var sdkType = FindTypeInAllAssemblies(SDK_CLASS_NAME);
if (sdkType != null)
{
Debug.Log("[PC高性能小游戏] 用户项目中已存在 EmbeddedAppletSDK 脚本");
Debug.Log($"[PC高性能小游戏] ✅ WXPCHPInitScript 脚本已加载 (程序集: {sdkType.Assembly.GetName().Name})");
return;
}
// 模板路径SDK 包内)
string templatePath = Path.Combine(
Application.dataPath,
"WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs"
);
if (!File.Exists(templatePath))
{
Debug.LogWarning($"[PC高性能小游戏] 找不到模板文件: {templatePath}");
Debug.LogWarning("[PC高性能小游戏] 将仅创建空 GameObject不添加组件");
return;
}
// 目标路径(用户项目 Scripts 目录)
string targetPath = Path.Combine(Application.dataPath, "Scripts/EmbeddedAppletSDK.cs");
// 确保目标目录存在
string targetDir = Path.GetDirectoryName(targetPath);
if (!Directory.Exists(targetDir))
{
Directory.CreateDirectory(targetDir);
}
// 复制文件
File.Copy(templatePath, targetPath, false); // 不覆盖已存在的文件
AssetDatabase.Refresh();
Debug.Log($"[PC高性能小游戏] 已复制 EmbeddedAppletSDK.cs 到: {targetPath}");
// 脚本应该在 SDK Runtime 目录,如果找不到说明 SDK 安装有问题
Debug.LogError("[PC高性能小游戏] ❌ 找不到 WXPCHPInitScript 类型");
Debug.LogError("[PC高性能小游戏] 请确保 WX-WASM-SDK-V2 已正确安装");
throw new BuildFailedException("[PC高性能小游戏] 缺少 WXPCHPInitScript 脚本,请检查 SDK 安装");
}
/// <summary>
@ -92,7 +94,6 @@ namespace WeChatWASM
/// </summary>
private void InjectSDKToFirstScene()
{
// 1. 获取第一个启用的场景
var firstScenePath = GetFirstEnabledScene();
if (string.IsNullOrEmpty(firstScenePath))
{
@ -100,48 +101,56 @@ namespace WeChatWASM
return;
}
// 2. 保存当前场景状态
var currentScenes = EditorSceneManager.GetSceneManagerSetup();
// 3. 打开目标场景
var scene = EditorSceneManager.OpenScene(firstScenePath, OpenSceneMode.Single);
// 4. 检查是否已存在 SDK 对象
var existingSDK = GameObject.Find("EmbeddedAppletSDK");
if (existingSDK != null)
// 删除旧的对象(兼容从 EmbeddedAppletSDK 迁移)
var oldSDK = GameObject.Find("EmbeddedAppletSDK");
if (oldSDK != null)
{
Debug.Log($"[PC高性能小游戏] 场景 {scene.name} 中已存在 SDK 对象,跳过注入");
RestoreScenes(currentScenes);
return;
Debug.Log("[PC高性能小游戏] 删除旧的 EmbeddedAppletSDK 对象");
GameObject.DestroyImmediate(oldSDK);
}
// 5. 创建空 GameObject 并添加 EmbeddedAppletSDK 组件
var sdkObject = new GameObject("EmbeddedAppletSDK");
// 检查是否已存在新的 SDK 对象
var existingSDK = GameObject.Find(SDK_GAMEOBJECT_NAME);
if (existingSDK != null)
{
Debug.Log($"[PC高性能小游戏] 场景中已存在 {SDK_GAMEOBJECT_NAME},重新创建");
GameObject.DestroyImmediate(existingSDK);
}
// 创建 GameObject 并添加组件
var sdkObject = new GameObject(SDK_GAMEOBJECT_NAME);
var sdkType = FindTypeInAllAssemblies(SDK_CLASS_NAME);
// 尝试添加组件(如果用户项目中有该脚本)
var sdkType = System.Type.GetType("EmbeddedAppletSDK");
if (sdkType != null)
{
var assemblyName = sdkType.Assembly.GetName().Name;
Debug.Log($"[PC高性能小游戏] 找到 WXPCHPInitScript程序集: {assemblyName}");
if (assemblyName.Contains("Editor"))
{
Debug.LogError("[PC高性能小游戏] ❌ WXPCHPInitScript 在 Editor 程序集中!");
GameObject.DestroyImmediate(sdkObject);
throw new BuildFailedException("[PC高性能小游戏] WXPCHPInitScript 必须在 Runtime 程序集");
}
sdkObject.AddComponent(sdkType);
Debug.Log($"[PC高性能小游戏] 已在 {scene.name} 中创建 SDK 对象并添加组件");
Debug.Log($"[PC高性能小游戏] 已在 {scene.name} 中创建 {SDK_GAMEOBJECT_NAME} 并添加组件");
}
else
{
Debug.LogWarning("[PC高性能小游戏] 找不到 EmbeddedAppletSDK 类型,仅创建空对象");
Debug.LogWarning("[PC高性能小游戏] 请确保项目中包含 EmbeddedAppletSDK.cs 脚本");
Debug.LogError("[PC高性能小游戏] ❌ 找不到 WXPCHPInitScript 类型");
GameObject.DestroyImmediate(sdkObject);
throw new BuildFailedException("[PC高性能小游戏] 无法找到 WXPCHPInitScript 组件");
}
// 6. 保存场景
EditorSceneManager.MarkSceneDirty(scene);
EditorSceneManager.SaveScene(scene);
// 7. 恢复之前的场景布局
RestoreScenes(currentScenes);
}
/// <summary>
/// 获取第一个启用的场景路径
/// </summary>
private string GetFirstEnabledScene()
{
foreach (var scene in EditorBuildSettings.scenes)
@ -154,9 +163,6 @@ namespace WeChatWASM
return null;
}
/// <summary>
/// 恢复之前打开的场景布局
/// </summary>
private void RestoreScenes(UnityEditor.SceneManagement.SceneSetup[] setup)
{
if (setup != null && setup.Length > 0)

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a9d92535713c21c610124e46ffc0e257
guid: 2ca7aa59b2142320f24d23c950fd83d7
DefaultImporter:
externalObjects: {}
userData:

View File

@ -3,12 +3,14 @@
## 📂 文件结构
```
WX-WASM-SDK-V2/Editor/PCHighPerformance/
├── PCHPBuildPreProcessor.cs # 构建预处理器(自动注入)
├── WXPCSettingHelper.cs # 构建配置助手
├── WXEditorPCHPWindow.cs # 编辑器窗口
└── Templates/
└── EmbeddedAppletSDK.cs # SDK 运行时脚本模板
WX-WASM-SDK-V2/
├── Editor/PCHighPerformance/
│ ├── PCHPBuildPreProcessor.cs # 构建预处理器(自动注入)
│ ├── PCHPDebugHelper.cs # 调试工具
│ ├── WXPCSettingHelper.cs # 构建配置助手
│ └── WXEditorPCHPWindow.cs # 编辑器窗口
└── Runtime/
└── WXPCHPInitScript.cs # SDK 运行时脚本
```
---
@ -26,15 +28,15 @@ WX-WASM-SDK-V2/Editor/PCHighPerformance/
PCHPBuildPreProcessor.OnPreprocessBuild() 触发
Step 1: 检查用户项目是否有 EmbeddedAppletSDK.cs
├── 有 → 跳过
└── 没有 → 从 Templates/ 复制到 Assets/Scripts/
Step 1: 检查 WXPCHPInitScript 是否已加载
├── 已加载 → 继续
└── 未加载 → 报错中断SDK 安装问题)
Step 2: 打开首个启用场景
Step 3: 检查场景是否已有 "EmbeddedAppletSDK" GameObject
├── 有 → 跳过注入
└── 没有 → 创建空 GameObject + 添加 EmbeddedAppletSDK 组件
Step 3: 检查场景是否已有 "WXPCHPInitScript" GameObject
├── 有 → 删除重建
└── 没有 → 创建新 GameObject + 添加 WXPCHPInitScript 组件
Step 4: 保存场景并恢复原始布局
@ -46,29 +48,23 @@ Step 4: 保存场景并恢复原始布局
## ✅ 关键特性
1. **零侵入**:不修改开发者当前打开的场景
2. **智能检测**:自动检测是否已存在脚本/对象,避免重复
3. **自动复制**:首次使用时自动将 SDK 脚本复制到用户项目
4. **可定制**:开发者可修改复制后的脚本实现自定义逻辑
2. **智能检测**:自动检测是否已存在脚本/对象
3. **SDK 内置**:脚本位于 SDK Runtime 目录,无需复制到用户项目
4. **命名空间隔离**:使用 `WeChatWASM` 命名空间避免冲突
---
## 🔧 配置说明
### 模板文件位置
### 脚本位置
```
Assets/WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs
Assets/WX-WASM-SDK-V2/Runtime/WXPCHPInitScript.cs
```
**作用**:首次构建时自动复制到用户项目的 `Assets/Scripts/` 目录
**类名**`WeChatWASM.WXPCHPInitScript`
### 复制目标路径
```
用户项目/Assets/Scripts/EmbeddedAppletSDK.cs
```
**策略**`File.Copy(overwrite: false)` → 不会覆盖用户已修改的文件
**作用**:运行时初始化 PC 高性能小游戏 SDK与宿主程序通信
---
@ -77,14 +73,8 @@ Assets/WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs
### Q: 为什么导出的工程没有 SDK 对象?
检查 Console 日志:
- ✅ `[PC高性能小游戏] 已在 XXX 中创建 SDK 对象并添加组件` → 成功
- ⚠️ `找不到 EmbeddedAppletSDK 类型` → 脚本未编译或命名空间错误
### Q: 如何自定义 SDK 逻辑?
1. 构建一次(自动复制模板到 `Assets/Scripts/EmbeddedAppletSDK.cs`
2. 修改该文件
3. 后续构建会使用你修改的版本
- ✅ `[PC高性能小游戏] ✅ 已在 XXX 中创建 WXPCHPInitScript 并添加组件` → 成功
- ⚠️ `找不到 WXPCHPInitScript 类型` → SDK 未正确安装
### Q: DLL 加载失败?
@ -102,12 +92,18 @@ Assets/WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs
| 回调优先级 | `callbackOrder = 0` |
| 支持平台 | Windows x64, macOS |
| 场景修改策略 | 临时打开 → 注入 → 保存 → 恢复 |
| 脚本复制策略 | 首次复制,不覆盖已有文件 |
| 类全名 | `WeChatWASM.WXPCHPInitScript` |
---
## 🔄 更新日志
### v1.1.0 (2026-03-02)
- ✅ 重命名 `EmbeddedAppletSDK``WXPCHPInitScript`
- ✅ 迁移脚本到 Runtime 目录(解决 Editor 脚本无法挂载问题)
- ✅ 添加 `WeChatWASM` 命名空间
- ✅ 移除模板复制机制(脚本现在内置于 SDK
### v1.0.0 (2026-03-02)
- ✅ 实现自动注入 EmbeddedAppletSDK GameObject
- ✅ 智能检测并复制模板脚本

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5da59123808375d7334d3bff5b7bf319
guid: 54bf2ecb03cb07b11234948d4d3e2fcb
DefaultImporter:
externalObjects: {}
userData:

View File

@ -8,14 +8,6 @@
### 解决方案 ✅
已修复:在 `OnSettingsGUI()` 中添加 `GUI.changed` 检测,每次输入时自动保存
```csharp
// OnSettingsGUI() 结尾
if (GUI.changed)
{
SaveData(); // 实时保存
}
```
---
## 🐛 问题2ShowInfo 逻辑未执行
@ -39,12 +31,12 @@ if (GUI.changed)
- 确保 DLL 在运行时根目录
- 查看 Unity Player.log
- Windows: `%APPDATA%\..\LocalLow\<CompanyName>\<ProductName>\Player.log`
- 搜索关键字: `[EmbeddedAppletSDK]` 或 `DllNotFoundException`
- 搜索关键字: `[WXPCHPInitScript]` 或 `DllNotFoundException`
---
#### 2. GameObject 未注入 (10%)
**症状**:构建后场景中没有 `EmbeddedAppletSDK` 对象
**症状**:构建后场景中没有 `WXPCHPInitScript` 对象
**验证**:使用调试工具
```
@ -54,37 +46,18 @@ Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态
**可能的问题**
- ❌ Build Settings 中没有启用场景
- ❌ 构建前 `PCHPBuildPreProcessor` 未执行
- ❌ 脚本编译错误导致组件未挂载
- ❌ SDK 未正确安装
**解决**
1. 确保 Build Settings 有至少一个启用场景
2. 查看 Console 日志:
```
[PC高性能小游戏] 开始预处理构建...
[PC高性能小游戏] 已在 XXX 中创建 SDK 对象并添加组件
[PC高性能小游戏] ✅ 已在 XXX 中创建 WXPCHPInitScript 并添加组件
```
---
#### 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 注入状态
@ -96,14 +69,12 @@ Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态
```
[构建场景] 启用的场景数: 1
✅ 首场景: Assets/Scenes/Main.unity
✅ 找到 SDK GameObject: EmbeddedAppletSDK
✅ 挂载的脚本: EmbeddedAppletSDK
[脚本文件检查]
✅ 用户项目中存在 EmbeddedAppletSDK.cs
✅ 找到 SDK GameObject: WXPCHPInitScript
✅ 挂载的脚本: WeChatWASM.WXPCHPInitScript
[类型加载检查]
✅ EmbeddedAppletSDK 类型已加载
✅ WXPCHPInitScript 类型已加载
程序集: WxWasmSDKRuntime
```
---
@ -129,19 +100,18 @@ Mac: ~/Library/Logs/Company Name/Product Name/Player.log
**搜索关键字**
```
[EmbeddedAppletSDK]
[WXPCHPInitScript]
DllNotFoundException
InitEmbeddedGameSDK
```
**正常日志**
```
[EmbeddedAppletSDK] ========== Awake 被调用 ==========
[EmbeddedAppletSDK] GameObject 名称: EmbeddedAppletSDK
[EmbeddedAppletSDK] ========== 开始初始化 ==========
[EmbeddedAppletSDK] 当前工作目录: C:\...\YourBuild
[EmbeddedAppletSDK] Step 1: 调用 InitEmbeddedGameSDK
[EmbeddedAppletSDK] InitEmbeddedGameSDK 成功
[WXPCHPInitScript] ========== Awake 被调用 ==========
[WXPCHPInitScript] GameObject 名称: WXPCHPInitScript
[WXPCHPInitScript] ========== 开始初始化 ==========
[WXPCHPInitScript] Step 1: 调用 InitEmbeddedGameSDK
[WXPCHPInitScript] InitEmbeddedGameSDK 成功
...
```
@ -178,19 +148,5 @@ DllNotFoundException: Unable to load DLL 'direct_applet_sdk.dll'
|----------|------|----------|
| `DllNotFoundException` | DLL 未找到 | 复制 DLL 到 .exe 同级目录 |
| `EntryPointNotFoundException` | 函数不存在 | 检查 DLL 版本是否匹配 |
| `找不到 EmbeddedAppletSDK 类型` | 脚本未编译 | 检查编译错误或重新导入 |
| `找不到 WXPCHPInitScript 类型` | SDK 未安装 | 重新导入 WX-WASM-SDK-V2 |
| `GetActiveWindow 返回空句柄` | 窗口未创建 | 延迟初始化或检查 Unity Player 设置 |
---
## 🚀 最小验证示例
创建一个最简单的测试场景:
1. **创建新场景** `TestSDK.unity`
2. **添加到 Build Settings** 并设为首场景
3. **构建一次** → 应该自动注入 SDK
4. **检查场景** → 应该有 `EmbeddedAppletSDK` GameObject
5. **运行 .exe**(确保 DLL 存在)→ 应该有弹窗
如果这个流程失败,提供 Console 和 Player.log 完整日志。

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 388be2bb1e293f1e640dac94c6c7142a
guid: b486b5a7ab59d38e7f20e2fa06aca2af
DefaultImporter:
externalObjects: {}
userData:

View File

@ -2,7 +2,7 @@ namespace WeChatWASM
{
public class WXPluginVersion
{
public static string pluginVersion = "202603020928"; // 这一行不要改他,导出的时候会自动替换
public static string pluginVersion = "202603021114"; // 这一行不要改他,导出的时候会自动替换
}
public class WXPluginConf

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f839747487e0c508f49a50a461a340d7
guid: c82373befffb6008416e6ad31c2434c2
DefaultImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 86cc984bf1aad3b3363a9d502381de4c
guid: 2621d0a4da5c55ffcbb9eebcf245b725
DefaultImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4e1b3ecbebc4c187788a6f9a5fa5760d
guid: 179e787af15701e94d36c0da1d3d66c5
DefaultImporter:
externalObjects: {}
userData:

385
Runtime/WXPCHPInitScript.cs Normal file
View File

@ -0,0 +1,385 @@
using System;
using System.Runtime.InteropServices;
using UnityEngine;
namespace WeChatWASM
{
/// <summary>
/// PC高性能小游戏初始化脚本
/// 负责与宿主程序的 direct_applet_sdk.dll 进行交互
/// </summary>
public class WXPCHPInitScript : MonoBehaviour
{
#region DLL Imports
private const string DLL_NAME = "direct_applet_sdk.dll";
// 初始化SDK
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern bool InitEmbeddedGameSDK();
// 注册异步消息处理器
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern void RegisterAsyncMsgHandler(AsyncMsgHandlerDelegate handler);
// 建立Mojo连接
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern bool EstablishConnection();
// 初始化游戏窗口 - 传入窗口句柄
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern bool InitGameWindow(ulong hwnd);
// 异步发送消息
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern bool SendMsgAsync(IntPtr data, int len);
// 清理资源
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
private static extern bool Cleanup();
// 获取当前活动窗口句柄
[DllImport("user32.dll")]
private static extern IntPtr GetActiveWindow();
// Windows MessageBox
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
#endregion
#region Delegate Definition
// 异步消息处理器委托
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void AsyncMsgHandlerDelegate(IntPtr data, int len);
// 保持委托引用防止被GC回收
private static AsyncMsgHandlerDelegate asyncMsgHandler;
#endregion
#region Singleton
private static WXPCHPInitScript instance;
public static WXPCHPInitScript Instance => instance;
#endregion
#region Events
// 收到异步消息时触发的事件
public event Action<byte[]> OnMessageReceived;
#endregion
#region Properties
// SDK是否已初始化
public bool IsInitialized { get; private set; }
// 是否已连接
public bool IsConnected { get; private set; }
// 窗口句柄
public IntPtr WindowHandle { get; private set; }
#endregion
#region Unity Lifecycle
private void Awake()
{
Debug.Log("[WXPCHPInitScript] ========== Awake 被调用 ==========");
Debug.Log($"[WXPCHPInitScript] GameObject 名称: {gameObject.name}");
Debug.Log($"[WXPCHPInitScript] 场景名称: {UnityEngine.SceneManagement.SceneManager.GetActiveScene().name}");
if (instance != null && instance != this)
{
Debug.LogWarning("[WXPCHPInitScript] 检测到重复实例,销毁当前对象");
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
Debug.Log("[WXPCHPInitScript] 单例创建成功,已设置 DontDestroyOnLoad");
// 初始化SDK
Initialize();
}
private void OnDestroy()
{
if (instance == this)
{
CleanupSDK();
instance = null;
}
}
private void OnApplicationQuit()
{
CleanupSDK();
}
#endregion
#region Public Methods
/// <summary>
/// 初始化SDK并建立连接
/// </summary>
public void Initialize()
{
if (IsInitialized)
{
Debug.LogWarning("[WXPCHPInitScript] SDK已经初始化");
return;
}
Debug.Log("[WXPCHPInitScript] ========== 开始初始化 ==========");
Debug.Log($"[WXPCHPInitScript] 当前工作目录: {System.IO.Directory.GetCurrentDirectory()}");
Debug.Log($"[WXPCHPInitScript] DLL 搜索路径: {DLL_NAME}");
try
{
// 1. 初始化SDK
Debug.Log("[WXPCHPInitScript] Step 1: 调用 InitEmbeddedGameSDK");
ShowInfo("开始调用 InitEmbeddedGameSDK...");
if (!InitEmbeddedGameSDK())
{
ShowError("InitEmbeddedGameSDK 返回 false");
return;
}
ShowInfo("InitEmbeddedGameSDK 成功");
// 2. 注册消息处理器 (暂时屏蔽)
// asyncMsgHandler = HandleAsyncMessage;
// RegisterAsyncMsgHandler(asyncMsgHandler);
// ShowInfo("RegisterAsyncMsgHandler 成功");
Debug.Log("[WXPCHPInitScript] Step 2: RegisterAsyncMsgHandler 已跳过");
ShowInfo("RegisterAsyncMsgHandler 已跳过");
// 3. 建立连接
Debug.Log("[WXPCHPInitScript] Step 3: 调用 EstablishConnection");
if (!EstablishConnection())
{
ShowError("EstablishConnection 返回 false");
IsConnected = false;
return;
}
IsConnected = true;
ShowInfo("EstablishConnection 成功");
// 4. 获取窗口句柄并初始化游戏窗口
Debug.Log("[WXPCHPInitScript] Step 4: 获取窗口句柄");
WindowHandle = GetActiveWindow();
if (WindowHandle == IntPtr.Zero)
{
ShowError("GetActiveWindow 返回空句柄");
return;
}
ShowInfo($"获取窗口句柄成功: 0x{WindowHandle.ToInt64():X}");
Debug.Log("[WXPCHPInitScript] Step 5: 调用 InitGameWindow");
if (!InitGameWindow((ulong)WindowHandle.ToInt64()))
{
ShowError("InitGameWindow 返回 false");
return;
}
ShowInfo("InitGameWindow 成功");
IsInitialized = true;
ShowInfo("SDK 完全初始化成功!");
Debug.Log("[WXPCHPInitScript] ========== 初始化完成 ==========");
}
catch (DllNotFoundException e)
{
ShowError($"找不到DLL: {e.Message}");
Debug.LogError($"[WXPCHPInitScript] DLL 加载失败,请确保 {DLL_NAME} 在以下位置之一:");
Debug.LogError($" - 与 .exe 同级目录");
Debug.LogError($" - System32 目录");
Debug.LogError($" - PATH 环境变量包含的路径");
}
catch (EntryPointNotFoundException e)
{
ShowError($"找不到函数入口: {e.Message}");
Debug.LogError($"[WXPCHPInitScript] 函数入口点错误,可能是 DLL 版本不匹配");
}
catch (Exception e)
{
ShowError($"初始化异常: {e.Message}\n{e.StackTrace}");
Debug.LogError($"[WXPCHPInitScript] 未知异常: {e}");
}
}
/// <summary>
/// 显示信息弹窗(仅 Windows
/// </summary>
private void ShowInfo(string message)
{
Debug.Log($"[WXPCHPInitScript] {message}");
#if UNITY_STANDALONE_WIN
try
{
// MB_OK | MB_ICONINFORMATION = 0x40
MessageBox(IntPtr.Zero, message, "WXPCHPInitScript Info", 0x40);
}
catch (System.Exception e)
{
Debug.LogWarning($"[WXPCHPInitScript] MessageBox 调用失败: {e.Message}");
}
#endif
}
/// <summary>
/// 显示错误弹窗(仅 Windows
/// </summary>
private void ShowError(string message)
{
Debug.LogError($"[WXPCHPInitScript] {message}");
#if UNITY_STANDALONE_WIN
try
{
// MB_OK | MB_ICONERROR = 0x10
MessageBox(IntPtr.Zero, message, "WXPCHPInitScript Error", 0x10);
}
catch (System.Exception e)
{
Debug.LogWarning($"[WXPCHPInitScript] MessageBox 调用失败: {e.Message}");
}
#endif
}
/// <summary>
/// 发送异步消息到宿主
/// </summary>
/// <param name="message">消息内容</param>
/// <returns>是否发送成功</returns>
public bool SendMessage(string message)
{
if (!IsInitialized || !IsConnected)
{
Debug.LogWarning("[WXPCHPInitScript] SDK未初始化或未连接");
return false;
}
try
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
return SendMessage(data);
}
catch (Exception e)
{
Debug.LogError($"[WXPCHPInitScript] 发送消息异常: {e.Message}");
return false;
}
}
/// <summary>
/// 发送异步消息到宿主
/// </summary>
/// <param name="data">消息数据</param>
/// <returns>是否发送成功</returns>
public bool SendMessage(byte[] data)
{
if (!IsInitialized || !IsConnected)
{
Debug.LogWarning("[WXPCHPInitScript] SDK未初始化或未连接");
return false;
}
if (data == null || data.Length == 0)
{
Debug.LogWarning("[WXPCHPInitScript] 发送的数据为空");
return false;
}
try
{
IntPtr ptr = Marshal.AllocHGlobal(data.Length);
try
{
Marshal.Copy(data, 0, ptr, data.Length);
return SendMsgAsync(ptr, data.Length);
}
finally
{
Marshal.FreeHGlobal(ptr);
}
}
catch (Exception e)
{
Debug.LogError($"[WXPCHPInitScript] 发送消息异常: {e.Message}");
return false;
}
}
#endregion
#region Private Methods
/// <summary>
/// 清理SDK资源
/// </summary>
private void CleanupSDK()
{
if (!IsInitialized)
{
return;
}
try
{
Cleanup();
Debug.Log("[WXPCHPInitScript] SDK清理完成");
}
catch (Exception e)
{
Debug.LogError($"[WXPCHPInitScript] 清理异常: {e.Message}");
}
finally
{
IsInitialized = false;
IsConnected = false;
}
}
/// <summary>
/// 异步消息处理回调
/// </summary>
[AOT.MonoPInvokeCallback(typeof(AsyncMsgHandlerDelegate))]
private static void HandleAsyncMessage(IntPtr data, int len)
{
if (data == IntPtr.Zero || len <= 0)
{
return;
}
try
{
byte[] buffer = new byte[len];
Marshal.Copy(data, buffer, 0, len);
// 在主线程中触发事件
if (instance != null)
{
// 直接调用如果需要线程安全可以使用Unity的主线程调度
instance.OnMessageReceived?.Invoke(buffer);
// 打印收到的消息(用于调试)
string message = System.Text.Encoding.UTF8.GetString(buffer);
Debug.Log($"[WXPCHPInitScript] 收到消息: {message}");
}
}
catch (Exception e)
{
Debug.LogError($"[WXPCHPInitScript] 处理消息异常: {e.Message}");
}
}
#endregion
}
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1584d28d472200f99971283eff15aa88
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ace84e2fe8cc7c7d5b42e93186dfd4e0
guid: 6f12eb91851c86e441426522beb0a094
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 519e67697b07f5228b87d640a9fb4df8
guid: 0a7e26ea1581c13cdbffaeb3395887a5
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 116dad64a9906ffc04f59be999899ecd
guid: 25d0a21473a333cc986cbda4c037ed12
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: dad800059e7e8a192b25d273e8455a79
guid: 0f90b2580d298615a70ddb28771cda3b
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6068521976eed65a034b9c8ebf443e8c
guid: 81715f40169298bb50d2a455623c5dd9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9e45894756813b50fd9e6421eda56318
guid: 51118fb0ac0558a84bdbef323023ca8d
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 56f517b6b14339ba75a7f51a83ce4722
guid: 0a19bb97de3301e5bc28daacaad68757
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0e2d25ee32af50789889ff364005d0a3
guid: 6e40776bf0b9b1227d3b9251df1703c1
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: dd3dfa48e71f520b52f17ef7e58f3a55
guid: 44df3cda043c701dc75c7284a3b477dc
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 92272b5d2884e2a95a9b12f23c2cf6c1
guid: 5ef824b8a0cb6c314c2927f74ed0f355
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: eb57b5d847ea75594216fff1b66ab789
guid: f08b163064a460f1a2f2be86d4d18cc4
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3a5d54d4ec1d412677665263239d0af1
guid: b5febb8fee8da7ff0e480338c9be6b76
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c3d1bb85b8190aeb9ac4dcd0bc578288
guid: 457c15e1754e495cf3076e2f35b92c30
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b350196659b24ff73e42ea4eb9f3d24a
guid: f8ea7eb1aac6afcbfdf238578b57a680
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 51ae1b9621f1c9f719d4512d8cf3379e
guid: 2fc434af441850251c21c6c90f005526
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f8d8db59d54825c2ef55a08fa33d329c
guid: 31730018d279eaf6b574dffb121534c5
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f85a92f30f7f37476c4513dea7479782
guid: 09781fb912d3dfa209822f6a18613f6f
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8f84bd5a5e30b01e604d05bc1408e755
guid: bfa55f06d8c8937ec1971926c52cfe1c
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 91f17e317ea8fc8194b8ba47a1670d09
guid: 3847d4a6e0b23c0b4279688b5bdc7530
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 895575aaf5fee18f445586c32e284c63
guid: 41a940eb493452b5ca7f2496643c4c49
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c3b9bf5760189b065977d7ddebea0b56
guid: 57e4a7d1466a7eb637c81a82fb2dc2cb
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 761096c145066426fba67384093bd19e
guid: 718a39e94d818b9af741e2f4d077e71a
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2592d6ff91356497cd6c4095bf71e271
guid: f8ac13266d20ac311ebe7681c71eb365
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 069cff06eb79481939c4fd04050d931d
guid: ed5fc526e2cfabb637c79a8c2f3b1582
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6b96f2a8f0692f3ce66b0b30ad60909a
guid: 1d7e2906c6ab48177ecea663e5397b87
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b218f2988b105f12438183c830f6ee5c
guid: ef57d9b2848ddca505328beac70c0124
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 85d6377d4ee98aa47f387da06b751f38
guid: cd7eff4f481709d65d0efca259236477
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 09a666ce5808b66f6eddf37ce0779c69
guid: 75923564009d0e3f446360dd92938e10
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cfe239a84d5442a749f5b67f1b19d731
guid: c7ba422e1d875caa79b3fe11fd9823c9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cadb32db8110d8f7bdf1f61d11b59af5
guid: c95eac3766ce8188890e409233129f2a
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 473001e984fe06fac4f2fb787d2bda7d
guid: 4e3e46347025067d15763d5a975d3ca7
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 87ac64f54535e5cadc3aaec10365947e
guid: d160ba62db5ac97e119096cf356bf5d6
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 95fafe9544ed15653a5dcbee9958391c
guid: 7d31dd2d04b2162bf9a4f3bb19837c3e
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fd01d1d1b8f9b7bdf9c43a5dc230c481
guid: 5ff7a26f93d1f74e459c1b840f2c12fe
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 07b054927cdc5bd821f08d9b30c7af13
guid: bc81eddc83fd6929e75fc57219a81d4e
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3d800e8da0712461d61bbb4034eb6282
guid: 2558544ab3321a2f4743d6592680c125
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f9084e6550131abdddb6c7d871b05a28
guid: 0582248b995c7cca7893018082076802
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 671a0237e2bac57df9e7571be181fa9f
guid: b3da2c4f9dd30f1862ebcf1def99560f
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 27b93218018ca1420e030de809bdf11f
guid: 598e89b6cdfc6fa6abf352cd096954f9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 73722be6e5a89be9d7f408d897c8f265
guid: e500a6454364f063d9cf060b1602f259
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 24b27b33b6bfb4ff8dc758588475a444
guid: 8d7bc4eab219a65271ba89f326c30bbb
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 78547b3f54de3243d284afc81ae94f31
guid: 0a668460cac4afd3c3d12625b6ae1e15
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4ac0d638d88cfd51e3c05930f9f183a8
guid: 2cda9d72db6f6903009c8aaf9bf6f68f
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1feb1c192b9b3c1653ea07dc6f283b54
guid: 344c7d2102a300e0454c26c9b97bd83c
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: bfe243e27330a57a5ca5c86508dbe738
guid: 0106a13c5e7bd4c5733e7a27faa7e9a1
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b09823c6cdb23256a42f48510c0cd6be
guid: eb0a7492c8354907b6ca1711d832563e
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 39b3d865ee7d6280a1ea3864f5cf8eff
guid: e7f6afd9951b581521a458798816fdd0
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5d456cee5d04f9ceae2cb1a4db1f826a
guid: fcc4422ae9249edd7d1e7abdcdefb692
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7d6c7c7146412330138a7e88d5d2288c
guid: cb404b14561f8c56b536ba1cb4c98300
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 63b29c4013de853aaae9d0cfe5512916
guid: e458b18a0b19a5b9da68bdbe7cb2fe52
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: bcdd592018ab77193d41e01bf3566c83
guid: 47d3da5967ab415a7fac5d6931d3884b
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8969742bbe683f4dab056c54922723a9
guid: 5207916bd4b9d28c05ef9348fa11fdfa
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 490c39ced56e1e31a39971e6d8c864fd
guid: fe31542ac0fb64b0243ec260bf110095
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8fa9e804eb383e519888383aba40f937
guid: 00a6cd0399bd8ba44cf58ea538eb406a
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: bc47a436db3426afc98b79088625033a
guid: f50d448b60f6a62476526a66ebb73830
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f0dc1aa341a47fda86a809f7e5fabe18
guid: e32cdb2ff8035fadad2786a0dac80163
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ce41fd87bbe5157d19185821f35ae942
guid: c05c394cfc48bb13b67c29f215ff51f9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 43b162f96620499b7772ed5f5ec57107
guid: 0ba1889b465638ea2b1739e9fbf784a8
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f43c14877690aae194d7e3a6d5e46bc0
guid: a320d0533623c8b435cf2c1fb551b5c0
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b0f0bcef624ae4599a2a9e819497e7c8
guid: cf3890a7086569c4dfbd0f1c4afa11fb
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8f417d5c954f3b02b1b9cbc931e6aa57
guid: af92f7c4fbf8eaefceba5fbb2acc4aba
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3459998980f356e6800a60f96884e3a4
guid: 42f15d83ee2bcb3f14cbd3d8e7a70623
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8c63d38377778e7659f6e0521adfa831
guid: 6a770e4687367b9cd93ecf05c1fac61c
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1d7323a13515d0e016d410551542a67b
guid: a5762d10b7c12ec64c7c4e1a998d2bbe
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 28813903b4d5da4fb47180ef40ff5227
guid: d26a130c438009e63bc182491cc5b1f5
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a8f900fe72adc5e8c5e82f31b18517f3
guid: aafd6a988cfe37c73fefa6fab3db5769
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0eed85f027b6cac625e38f9311daff25
guid: 860c1c447c43abf0ecd62c9ef230b165
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7ef0c7c0d9fc6400670211c8424a6054
guid: 87f36268db7257b5152e983dd3c9c687
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2c93ee918324fec0e71de605004f1fa8
guid: 51741f8a45fb9f96a5858f8d05b9f4ac
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b7bfc86654c78f23a8e4e2a5746b4b9b
guid: b988abb50434e372f8218f170bf5718e
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 365b08a87ce334b670144df2a42a108d
guid: 5f08aeb515f2830966419739905c40ee
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 93692665dde4084cd76a5521203f61d3
guid: 31fc88fd858226970fae2fcd764f2da5
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e388f0b880360d07ad62c0167bd8e1a5
guid: 55b4fc1398bb702ddbce11b12d979c36
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3f56128a6df4a83af2eb9cccdc1528b8
guid: 8621ed46ec94640abb30b3366157f710
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fd58df7854106586959e7803b5b82c94
guid: f2ab2c7fcd57fa703708ae014910c968
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e15f98c9cecc54b68a7040160b23f576
guid: 5d741507a9777a6307d01f04c70b9e85
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 85c738e94529f795e575a9a68adf5ec0
guid: 052d39ec162296fd0291b83af9c16fc2
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a529f2c782e14c34b092312276a062af
guid: a32068f545bededfb8ae83fe658749f6
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 99febe6ee771bff42e5785f0f122d857
guid: e0653708106771cfe99baf60c74e7df7
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0b46dab56e09c8d375ba06cc12457509
guid: 3331da11ea2dd92bdcb97a5b5828f859
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c2ab3bf5b2866f0f12c334e5a069a180
guid: be1ff5138ba37a61eef7a21978d6336a
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c59c3662a2264a464e8130a15aacf548
guid: a3b69a60f5bf4bdb94aec6b8fda6ad23
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c26a8063c15c73b2a23eb8005a8df3c8
guid: ea7604a7e6a44f8e271e9593dab14144
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 82ad69e34da477e771531107cd30a2a9
guid: c61f72f4ab75891cee6b1c21db655acc
folderAsset: yes
DefaultImporter:
externalObjects: {}

Some files were not shown because too many files have changed in this diff Show More