mirror of
https://github.com/wechat-miniprogram/minigame-tuanjie-transform-sdk.git
synced 2026-04-22 01:35:56 +08:00
Auto-publish.
This commit is contained in:
parent
aa7d08b666
commit
42ec57080c
@ -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)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9d92535713c21c610124e46ffc0e257
|
||||
guid: 2ca7aa59b2142320f24d23c950fd83d7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -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
|
||||
- ✅ 智能检测并复制模板脚本
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5da59123808375d7334d3bff5b7bf319
|
||||
guid: 54bf2ecb03cb07b11234948d4d3e2fcb
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -8,14 +8,6 @@
|
||||
### 解决方案 ✅
|
||||
已修复:在 `OnSettingsGUI()` 中添加 `GUI.changed` 检测,每次输入时自动保存
|
||||
|
||||
```csharp
|
||||
// OnSettingsGUI() 结尾
|
||||
if (GUI.changed)
|
||||
{
|
||||
SaveData(); // 实时保存
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 问题2:ShowInfo 逻辑未执行
|
||||
@ -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 完整日志。
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 388be2bb1e293f1e640dac94c6c7142a
|
||||
guid: b486b5a7ab59d38e7f20e2fa06aca2af
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -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.
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f839747487e0c508f49a50a461a340d7
|
||||
guid: c82373befffb6008416e6ad31c2434c2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 86cc984bf1aad3b3363a9d502381de4c
|
||||
guid: 2621d0a4da5c55ffcbb9eebcf245b725
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e1b3ecbebc4c187788a6f9a5fa5760d
|
||||
guid: 179e787af15701e94d36c0da1d3d66c5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
385
Runtime/WXPCHPInitScript.cs
Normal file
385
Runtime/WXPCHPInitScript.cs
Normal 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
|
||||
}
|
||||
}
|
||||
7
Runtime/WXPCHPInitScript.cs.meta
Normal file
7
Runtime/WXPCHPInitScript.cs.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1584d28d472200f99971283eff15aa88
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ace84e2fe8cc7c7d5b42e93186dfd4e0
|
||||
guid: 6f12eb91851c86e441426522beb0a094
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 519e67697b07f5228b87d640a9fb4df8
|
||||
guid: 0a7e26ea1581c13cdbffaeb3395887a5
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 116dad64a9906ffc04f59be999899ecd
|
||||
guid: 25d0a21473a333cc986cbda4c037ed12
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dad800059e7e8a192b25d273e8455a79
|
||||
guid: 0f90b2580d298615a70ddb28771cda3b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6068521976eed65a034b9c8ebf443e8c
|
||||
guid: 81715f40169298bb50d2a455623c5dd9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e45894756813b50fd9e6421eda56318
|
||||
guid: 51118fb0ac0558a84bdbef323023ca8d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 56f517b6b14339ba75a7f51a83ce4722
|
||||
guid: 0a19bb97de3301e5bc28daacaad68757
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e2d25ee32af50789889ff364005d0a3
|
||||
guid: 6e40776bf0b9b1227d3b9251df1703c1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd3dfa48e71f520b52f17ef7e58f3a55
|
||||
guid: 44df3cda043c701dc75c7284a3b477dc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92272b5d2884e2a95a9b12f23c2cf6c1
|
||||
guid: 5ef824b8a0cb6c314c2927f74ed0f355
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb57b5d847ea75594216fff1b66ab789
|
||||
guid: f08b163064a460f1a2f2be86d4d18cc4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a5d54d4ec1d412677665263239d0af1
|
||||
guid: b5febb8fee8da7ff0e480338c9be6b76
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3d1bb85b8190aeb9ac4dcd0bc578288
|
||||
guid: 457c15e1754e495cf3076e2f35b92c30
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b350196659b24ff73e42ea4eb9f3d24a
|
||||
guid: f8ea7eb1aac6afcbfdf238578b57a680
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 51ae1b9621f1c9f719d4512d8cf3379e
|
||||
guid: 2fc434af441850251c21c6c90f005526
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8d8db59d54825c2ef55a08fa33d329c
|
||||
guid: 31730018d279eaf6b574dffb121534c5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f85a92f30f7f37476c4513dea7479782
|
||||
guid: 09781fb912d3dfa209822f6a18613f6f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f84bd5a5e30b01e604d05bc1408e755
|
||||
guid: bfa55f06d8c8937ec1971926c52cfe1c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 91f17e317ea8fc8194b8ba47a1670d09
|
||||
guid: 3847d4a6e0b23c0b4279688b5bdc7530
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 895575aaf5fee18f445586c32e284c63
|
||||
guid: 41a940eb493452b5ca7f2496643c4c49
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3b9bf5760189b065977d7ddebea0b56
|
||||
guid: 57e4a7d1466a7eb637c81a82fb2dc2cb
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 761096c145066426fba67384093bd19e
|
||||
guid: 718a39e94d818b9af741e2f4d077e71a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2592d6ff91356497cd6c4095bf71e271
|
||||
guid: f8ac13266d20ac311ebe7681c71eb365
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 069cff06eb79481939c4fd04050d931d
|
||||
guid: ed5fc526e2cfabb637c79a8c2f3b1582
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b96f2a8f0692f3ce66b0b30ad60909a
|
||||
guid: 1d7e2906c6ab48177ecea663e5397b87
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b218f2988b105f12438183c830f6ee5c
|
||||
guid: ef57d9b2848ddca505328beac70c0124
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85d6377d4ee98aa47f387da06b751f38
|
||||
guid: cd7eff4f481709d65d0efca259236477
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 09a666ce5808b66f6eddf37ce0779c69
|
||||
guid: 75923564009d0e3f446360dd92938e10
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cfe239a84d5442a749f5b67f1b19d731
|
||||
guid: c7ba422e1d875caa79b3fe11fd9823c9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cadb32db8110d8f7bdf1f61d11b59af5
|
||||
guid: c95eac3766ce8188890e409233129f2a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 473001e984fe06fac4f2fb787d2bda7d
|
||||
guid: 4e3e46347025067d15763d5a975d3ca7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 87ac64f54535e5cadc3aaec10365947e
|
||||
guid: d160ba62db5ac97e119096cf356bf5d6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 95fafe9544ed15653a5dcbee9958391c
|
||||
guid: 7d31dd2d04b2162bf9a4f3bb19837c3e
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fd01d1d1b8f9b7bdf9c43a5dc230c481
|
||||
guid: 5ff7a26f93d1f74e459c1b840f2c12fe
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 07b054927cdc5bd821f08d9b30c7af13
|
||||
guid: bc81eddc83fd6929e75fc57219a81d4e
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d800e8da0712461d61bbb4034eb6282
|
||||
guid: 2558544ab3321a2f4743d6592680c125
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f9084e6550131abdddb6c7d871b05a28
|
||||
guid: 0582248b995c7cca7893018082076802
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 671a0237e2bac57df9e7571be181fa9f
|
||||
guid: b3da2c4f9dd30f1862ebcf1def99560f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 27b93218018ca1420e030de809bdf11f
|
||||
guid: 598e89b6cdfc6fa6abf352cd096954f9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73722be6e5a89be9d7f408d897c8f265
|
||||
guid: e500a6454364f063d9cf060b1602f259
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24b27b33b6bfb4ff8dc758588475a444
|
||||
guid: 8d7bc4eab219a65271ba89f326c30bbb
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78547b3f54de3243d284afc81ae94f31
|
||||
guid: 0a668460cac4afd3c3d12625b6ae1e15
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ac0d638d88cfd51e3c05930f9f183a8
|
||||
guid: 2cda9d72db6f6903009c8aaf9bf6f68f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1feb1c192b9b3c1653ea07dc6f283b54
|
||||
guid: 344c7d2102a300e0454c26c9b97bd83c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfe243e27330a57a5ca5c86508dbe738
|
||||
guid: 0106a13c5e7bd4c5733e7a27faa7e9a1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b09823c6cdb23256a42f48510c0cd6be
|
||||
guid: eb0a7492c8354907b6ca1711d832563e
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39b3d865ee7d6280a1ea3864f5cf8eff
|
||||
guid: e7f6afd9951b581521a458798816fdd0
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d456cee5d04f9ceae2cb1a4db1f826a
|
||||
guid: fcc4422ae9249edd7d1e7abdcdefb692
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d6c7c7146412330138a7e88d5d2288c
|
||||
guid: cb404b14561f8c56b536ba1cb4c98300
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 63b29c4013de853aaae9d0cfe5512916
|
||||
guid: e458b18a0b19a5b9da68bdbe7cb2fe52
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bcdd592018ab77193d41e01bf3566c83
|
||||
guid: 47d3da5967ab415a7fac5d6931d3884b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8969742bbe683f4dab056c54922723a9
|
||||
guid: 5207916bd4b9d28c05ef9348fa11fdfa
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 490c39ced56e1e31a39971e6d8c864fd
|
||||
guid: fe31542ac0fb64b0243ec260bf110095
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8fa9e804eb383e519888383aba40f937
|
||||
guid: 00a6cd0399bd8ba44cf58ea538eb406a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc47a436db3426afc98b79088625033a
|
||||
guid: f50d448b60f6a62476526a66ebb73830
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0dc1aa341a47fda86a809f7e5fabe18
|
||||
guid: e32cdb2ff8035fadad2786a0dac80163
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce41fd87bbe5157d19185821f35ae942
|
||||
guid: c05c394cfc48bb13b67c29f215ff51f9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 43b162f96620499b7772ed5f5ec57107
|
||||
guid: 0ba1889b465638ea2b1739e9fbf784a8
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f43c14877690aae194d7e3a6d5e46bc0
|
||||
guid: a320d0533623c8b435cf2c1fb551b5c0
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0f0bcef624ae4599a2a9e819497e7c8
|
||||
guid: cf3890a7086569c4dfbd0f1c4afa11fb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f417d5c954f3b02b1b9cbc931e6aa57
|
||||
guid: af92f7c4fbf8eaefceba5fbb2acc4aba
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3459998980f356e6800a60f96884e3a4
|
||||
guid: 42f15d83ee2bcb3f14cbd3d8e7a70623
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8c63d38377778e7659f6e0521adfa831
|
||||
guid: 6a770e4687367b9cd93ecf05c1fac61c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d7323a13515d0e016d410551542a67b
|
||||
guid: a5762d10b7c12ec64c7c4e1a998d2bbe
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 28813903b4d5da4fb47180ef40ff5227
|
||||
guid: d26a130c438009e63bc182491cc5b1f5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8f900fe72adc5e8c5e82f31b18517f3
|
||||
guid: aafd6a988cfe37c73fefa6fab3db5769
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0eed85f027b6cac625e38f9311daff25
|
||||
guid: 860c1c447c43abf0ecd62c9ef230b165
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7ef0c7c0d9fc6400670211c8424a6054
|
||||
guid: 87f36268db7257b5152e983dd3c9c687
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2c93ee918324fec0e71de605004f1fa8
|
||||
guid: 51741f8a45fb9f96a5858f8d05b9f4ac
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b7bfc86654c78f23a8e4e2a5746b4b9b
|
||||
guid: b988abb50434e372f8218f170bf5718e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 365b08a87ce334b670144df2a42a108d
|
||||
guid: 5f08aeb515f2830966419739905c40ee
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93692665dde4084cd76a5521203f61d3
|
||||
guid: 31fc88fd858226970fae2fcd764f2da5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e388f0b880360d07ad62c0167bd8e1a5
|
||||
guid: 55b4fc1398bb702ddbce11b12d979c36
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f56128a6df4a83af2eb9cccdc1528b8
|
||||
guid: 8621ed46ec94640abb30b3366157f710
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fd58df7854106586959e7803b5b82c94
|
||||
guid: f2ab2c7fcd57fa703708ae014910c968
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e15f98c9cecc54b68a7040160b23f576
|
||||
guid: 5d741507a9777a6307d01f04c70b9e85
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85c738e94529f795e575a9a68adf5ec0
|
||||
guid: 052d39ec162296fd0291b83af9c16fc2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a529f2c782e14c34b092312276a062af
|
||||
guid: a32068f545bededfb8ae83fe658749f6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99febe6ee771bff42e5785f0f122d857
|
||||
guid: e0653708106771cfe99baf60c74e7df7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b46dab56e09c8d375ba06cc12457509
|
||||
guid: 3331da11ea2dd92bdcb97a5b5828f859
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2ab3bf5b2866f0f12c334e5a069a180
|
||||
guid: be1ff5138ba37a61eef7a21978d6336a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c59c3662a2264a464e8130a15aacf548
|
||||
guid: a3b69a60f5bf4bdb94aec6b8fda6ad23
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c26a8063c15c73b2a23eb8005a8df3c8
|
||||
guid: ea7604a7e6a44f8e271e9593dab14144
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@ -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
Loading…
Reference in New Issue
Block a user