From 2d07e30c3222fa84739eb70016b879aebc93de0a Mon Sep 17 00:00:00 2001 From: nebulaliu Date: Fri, 20 Mar 2026 13:07:18 +0800 Subject: [PATCH] Auto-publish. --- CHANGELOG.md | 2 +- .../PCHPBuildPreProcessor.cs | 174 ++++ .../PCHPBuildPreProcessor.cs.meta | 7 + .../PCHighPerformance/README_AutoInjection.md | 110 ++ .../README_AutoInjection.md.meta | 7 + Editor/PCHighPerformance/TROUBLESHOOTING.md | 152 +++ .../PCHighPerformance/TROUBLESHOOTING.md.meta | 7 + Editor/PCHighPerformance/WXApkgPacker.cs | 267 +++++ Editor/PCHighPerformance/WXApkgPacker.cs.meta | 7 + Editor/PCHighPerformance/WXPCHPBuildHelper.cs | 272 +++++ .../WXPCHPBuildHelper.cs.meta | 7 + Editor/PCHighPerformance/WXPCSettingHelper.cs | 676 ++++++++++++ .../WXPCSettingHelper.cs.meta | 7 + Editor/WXConvertCore.cs | 18 + Editor/WXEditorSettingHelper.cs | 26 + Editor/WXPluginVersion.cs | 2 +- Editor/wx-editor.dll | Bin 246272 -> 246272 bytes Editor/wx-editor.xml | 5 + Editor/wx-editor.xml.meta | 2 +- Runtime/Examples.meta | 8 + Runtime/Examples/PCHPTestExample.cs | 257 +++++ Runtime/Examples/PCHPTestExample.cs.meta | 7 + Runtime/Plugins/wx-perf.dll | Bin 55808 -> 55808 bytes Runtime/Plugins/wx-runtime-editor.dll | Bin 275456 -> 275456 bytes Runtime/Plugins/wx-runtime-editor.xml.meta | 2 +- Runtime/Plugins/wx-runtime.dll | Bin 250368 -> 250368 bytes Runtime/Plugins/wx-runtime.xml.meta | 2 +- Runtime/WXBase.cs | 34 +- Runtime/WXPCHPInitScript.cs | 959 ++++++++++++++++++ Runtime/WXPCHPInitScript.cs.meta | 7 + .../playable-default/check-version.js.meta | 2 +- Runtime/playable-default/data-package.meta | 2 +- .../data-package/game.js.meta | 2 +- Runtime/playable-default/events.js.meta | 2 +- Runtime/playable-default/game.js.meta | 2 +- Runtime/playable-default/game.json.meta | 2 +- Runtime/playable-default/playable-fix.js.meta | 2 +- .../playable-default/plugin-config.js.meta | 2 +- Runtime/playable-default/plugins.meta | 2 +- .../plugins/check-update.js.meta | 2 +- .../plugins/screen-adapter.js.meta | 2 +- .../playable-default/project.config.json.meta | 2 +- .../playable-default/texture-config.js.meta | 2 +- .../playable-default/unity-namespace.js.meta | 2 +- .../unity-playable-plugin.meta | 2 +- .../unity-playable-plugin/index.js.meta | 2 +- Runtime/playable-default/unity-sdk.meta | 2 +- Runtime/playable-default/unity-sdk/audio.meta | 2 +- .../unity-sdk/audio/common.js.meta | 2 +- .../unity-sdk/audio/const.js.meta | 2 +- .../unity-sdk/audio/index.js.meta | 2 +- .../unity-sdk/audio/inner-audio.js.meta | 2 +- .../unity-sdk/audio/store.js.meta | 2 +- .../unity-sdk/audio/unity-audio.js.meta | 2 +- .../unity-sdk/audio/utils.js.meta | 2 +- .../unity-sdk/canvas-context.js.meta | 2 +- .../playable-default/unity-sdk/canvas.js.meta | 2 +- .../playable-default/unity-sdk/conf.js.meta | 2 +- .../unity-sdk/file-info.js.meta | 2 +- .../playable-default/unity-sdk/fix.js.meta | 2 +- Runtime/playable-default/unity-sdk/fs.js.meta | 2 +- .../playable-default/unity-sdk/index.js.meta | 2 +- .../playable-default/unity-sdk/logger.js.meta | 2 +- .../unity-sdk/mobileKeyboard.meta | 2 +- .../unity-sdk/mobileKeyboard/index.js.meta | 2 +- .../unity-sdk/module-helper.js.meta | 2 +- .../unity-sdk/recorder.js.meta | 2 +- .../unity-sdk/resType.js.meta | 2 +- .../unity-sdk/resTypeOther.js.meta | 2 +- .../unity-sdk/response.js.meta | 2 +- .../playable-default/unity-sdk/sdk.js.meta | 2 +- .../unity-sdk/special-callbacks.js.meta | 2 +- .../unity-sdk/texture.js.meta | 2 +- Runtime/playable-default/unity-sdk/touch.meta | 2 +- .../unity-sdk/touch/index.js.meta | 2 +- .../playable-default/unity-sdk/util.js.meta | 2 +- .../playable-default/unity-sdk/utils.js.meta | 2 +- .../playable-default/unity-sdk/video.js.meta | 2 +- Runtime/playable-default/unity-sdk/video.meta | 2 +- .../unity-sdk/video/index.js.meta | 2 +- Runtime/playable-default/wasmcode.meta | 2 +- .../playable-default/wasmcode/game.js.meta | 2 +- .../playable-default/weapp-adapter.js.meta | 2 +- Runtime/wechat-default/check-version.js.meta | 2 +- Runtime/wechat-default/data-package.meta | 2 +- .../wechat-default/data-package/game.js.meta | 2 +- Runtime/wechat-default/events.js.meta | 2 +- Runtime/wechat-default/game.js.meta | 2 +- Runtime/wechat-default/game.json.meta | 2 +- Runtime/wechat-default/images.meta | 2 +- .../wechat-default/images/background.jpg.meta | 2 +- .../wechat-default/images/unity_logo.png.meta | 2 +- Runtime/wechat-default/open-data.meta | 2 +- Runtime/wechat-default/open-data/data.meta | 2 +- .../open-data/data/index.js.meta | 2 +- .../open-data/data/utils.js.meta | 2 +- .../wechat-default/open-data/index.js.meta | 2 +- .../wechat-default/open-data/loading.js.meta | 2 +- Runtime/wechat-default/open-data/render.meta | 2 +- .../open-data/render/image.meta | 2 +- .../open-data/render/image/avatar.png.meta | 2 +- .../open-data/render/image/button1.png.meta | 2 +- .../open-data/render/image/button2.png.meta | 2 +- .../open-data/render/image/button3.png.meta | 2 +- .../open-data/render/image/loading.png.meta | 2 +- .../open-data/render/image/nameBg.png.meta | 2 +- .../render/image/rankAvatar.png.meta | 2 +- .../open-data/render/image/rankBg.png.meta | 2 +- .../open-data/render/image/shareBg.png.meta | 2 +- .../open-data/render/image/shareBg2.png.meta | 2 +- .../open-data/render/styles.meta | 2 +- .../render/styles/friendRank.js.meta | 2 +- .../open-data/render/styles/tips.js.meta | 2 +- .../wechat-default/open-data/render/tpls.meta | 2 +- .../open-data/render/tpls/friendRank.js.meta | 2 +- .../open-data/render/tpls/tips.js.meta | 2 +- Runtime/wechat-default/plugin-config.js.meta | 2 +- Runtime/wechat-default/plugins.meta | 2 +- .../plugins/check-update.js.meta | 2 +- .../plugins/screen-adapter.js.meta | 2 +- .../wechat-default/project.config.json.meta | 2 +- Runtime/wechat-default/texture-config.js.meta | 2 +- .../wechat-default/unity-namespace.js.meta | 2 +- Runtime/wechat-default/unity-sdk.meta | 2 +- .../wechat-default/unity-sdk/TCPSocket.meta | 2 +- .../unity-sdk/TCPSocket/index.js.meta | 2 +- .../wechat-default/unity-sdk/UDPSocket.meta | 2 +- .../unity-sdk/UDPSocket/index.js.meta | 2 +- Runtime/wechat-default/unity-sdk/ad.js.meta | 2 +- Runtime/wechat-default/unity-sdk/audio.meta | 2 +- .../unity-sdk/audio/common.js.meta | 2 +- .../unity-sdk/audio/const.js.meta | 2 +- .../unity-sdk/audio/index.js.meta | 2 +- .../unity-sdk/audio/inner-audio.js.meta | 2 +- .../unity-sdk/audio/store.js.meta | 2 +- .../unity-sdk/audio/unity-audio.js.meta | 2 +- .../unity-sdk/audio/utils.js.meta | 2 +- .../unity-sdk/authorize.js.meta | 2 +- .../wechat-default/unity-sdk/bluetooth.meta | 2 +- .../unity-sdk/bluetooth/index.js.meta | 2 +- .../wechat-default/unity-sdk/camera.js.meta | 2 +- .../unity-sdk/canvas-context.js.meta | 2 +- .../wechat-default/unity-sdk/canvas.js.meta | 2 +- Runtime/wechat-default/unity-sdk/chat.js.meta | 2 +- .../wechat-default/unity-sdk/cloud.js.meta | 2 +- Runtime/wechat-default/unity-sdk/conf.js.meta | 2 +- .../unity-sdk/file-info.js.meta | 2 +- Runtime/wechat-default/unity-sdk/fix.js.meta | 2 +- Runtime/wechat-default/unity-sdk/font.meta | 2 +- .../unity-sdk/font/fix-cmap.js.meta | 2 +- .../unity-sdk/font/index.js.meta | 2 +- .../unity-sdk/font/read-metrics.js.meta | 2 +- .../unity-sdk/font/split-sc.js.meta | 2 +- .../unity-sdk/font/util.js.meta | 2 +- Runtime/wechat-default/unity-sdk/fs.js.meta | 2 +- .../unity-sdk/game-club.js.meta | 2 +- .../unity-sdk/game-recorder.js.meta | 2 +- .../wechat-default/unity-sdk/gyroscope.meta | 2 +- .../unity-sdk/gyroscope/index.js.meta | 2 +- .../wechat-default/unity-sdk/index.js.meta | 2 +- .../wechat-default/unity-sdk/logger.js.meta | 2 +- .../unity-sdk/mobileKeyboard.meta | 2 +- .../unity-sdk/mobileKeyboard/index.js.meta | 2 +- .../unity-sdk/module-helper.js.meta | 2 +- .../unity-sdk/open-data.js.meta | 2 +- .../wechat-default/unity-sdk/recorder.js.meta | 2 +- .../wechat-default/unity-sdk/resType.js.meta | 2 +- .../unity-sdk/resTypeOther.js.meta | 2 +- .../wechat-default/unity-sdk/response.js.meta | 2 +- Runtime/wechat-default/unity-sdk/sdk.js.meta | 2 +- .../wechat-default/unity-sdk/share.js.meta | 2 +- .../wechat-default/unity-sdk/storage.js.meta | 2 +- .../wechat-default/unity-sdk/texture.js.meta | 2 +- Runtime/wechat-default/unity-sdk/touch.meta | 2 +- .../unity-sdk/touch/index.js.meta | 2 +- .../unity-sdk/upload-file.js.meta | 2 +- .../wechat-default/unity-sdk/userinfo.js.meta | 2 +- Runtime/wechat-default/unity-sdk/util.js.meta | 2 +- .../wechat-default/unity-sdk/utils.js.meta | 2 +- .../wechat-default/unity-sdk/video.js.meta | 2 +- Runtime/wechat-default/unity-sdk/video.meta | 2 +- .../unity-sdk/video/index.js.meta | 2 +- Runtime/wechat-default/wasmcode.meta | 2 +- Runtime/wechat-default/wasmcode/game.js.meta | 2 +- Runtime/wechat-default/weapp-adapter.js.meta | 2 +- Runtime/wechat-default/workers.meta | 2 +- Runtime/wechat-default/workers/response.meta | 2 +- .../workers/response/index.js.meta | 2 +- package.json | 15 +- 189 files changed, 3189 insertions(+), 166 deletions(-) create mode 100644 Editor/PCHighPerformance/PCHPBuildPreProcessor.cs create mode 100644 Editor/PCHighPerformance/PCHPBuildPreProcessor.cs.meta create mode 100644 Editor/PCHighPerformance/README_AutoInjection.md create mode 100644 Editor/PCHighPerformance/README_AutoInjection.md.meta create mode 100644 Editor/PCHighPerformance/TROUBLESHOOTING.md create mode 100644 Editor/PCHighPerformance/TROUBLESHOOTING.md.meta create mode 100644 Editor/PCHighPerformance/WXApkgPacker.cs create mode 100644 Editor/PCHighPerformance/WXApkgPacker.cs.meta create mode 100644 Editor/PCHighPerformance/WXPCHPBuildHelper.cs create mode 100644 Editor/PCHighPerformance/WXPCHPBuildHelper.cs.meta create mode 100644 Editor/PCHighPerformance/WXPCSettingHelper.cs create mode 100644 Editor/PCHighPerformance/WXPCSettingHelper.cs.meta create mode 100644 Runtime/Examples.meta create mode 100644 Runtime/Examples/PCHPTestExample.cs create mode 100644 Runtime/Examples/PCHPTestExample.cs.meta create mode 100644 Runtime/WXPCHPInitScript.cs create mode 100644 Runtime/WXPCHPInitScript.cs.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 92ac350d7..4eb015ed4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Removed - 删除功能/接口 Fixed - 修复问题 Others - 其他 --> -## 2026-3-15 v0.1.32 【普通更新】 +## 2026-3-16 v0.1.32 【普通更新】 ### Feature * 普通:更新基础库版本 * 普通:擂台赛api新增subScoreKey参数 diff --git a/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs b/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs new file mode 100644 index 000000000..2185226bf --- /dev/null +++ b/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs @@ -0,0 +1,174 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using UnityEditor.SceneManagement; +using System.IO; + +namespace WeChatWASM +{ + /// + /// PC高性能小游戏构建预处理器 + /// 负责在构建前向首场景注入 WXPCHPInitScript + /// + 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; + } + + Debug.Log("[PC高性能小游戏] 开始预处理构建..."); + + try + { + Debug.Log("[PC高性能小游戏] → 步骤1: 检查 WXPCHPInitScript 脚本是否存在"); + EnsureSDKScriptExists(); + + Debug.Log("[PC高性能小游戏] → 步骤2: 向首场景注入 SDK GameObject"); + InjectSDKToFirstScene(); + + Debug.Log("[PC高性能小游戏] ✅ 预处理完成!"); + } + catch (System.Exception e) + { + Debug.LogError("========================================"); + Debug.LogError($"[PC高性能小游戏] ❌ 预处理失败: {e.Message}\n{e.StackTrace}"); + Debug.LogError("========================================"); + throw; + } + } + + /// + /// 在所有程序集中查找类型 + /// + 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; + } + + /// + /// 确保 WXPCHPInitScript 脚本存在 + /// + private void EnsureSDKScriptExists() + { + var sdkType = FindTypeInAllAssemblies(SDK_CLASS_NAME); + if (sdkType != null) + { + Debug.Log($"[PC高性能小游戏] ✅ WXPCHPInitScript 脚本已加载 (程序集: {sdkType.Assembly.GetName().Name})"); + return; + } + + // 脚本应该在 SDK Runtime 目录,如果找不到说明 SDK 安装有问题 + Debug.LogError("[PC高性能小游戏] ❌ 找不到 WXPCHPInitScript 类型"); + Debug.LogError("[PC高性能小游戏] 请确保 WX-WASM-SDK-V2 已正确安装"); + throw new BuildFailedException("[PC高性能小游戏] 缺少 WXPCHPInitScript 脚本,请检查 SDK 安装"); + } + + /// + /// 向第一个启用的场景注入 SDK GameObject + /// + private void InjectSDKToFirstScene() + { + var firstScenePath = GetFirstEnabledScene(); + if (string.IsNullOrEmpty(firstScenePath)) + { + Debug.LogWarning("[PC高性能小游戏] 没有找到启用的场景,跳过注入"); + return; + } + + var currentScenes = EditorSceneManager.GetSceneManagerSetup(); + var scene = EditorSceneManager.OpenScene(firstScenePath, OpenSceneMode.Single); + + // 删除旧的对象(兼容从 EmbeddedAppletSDK 迁移) + var oldSDK = GameObject.Find("EmbeddedAppletSDK"); + if (oldSDK != null) + { + Debug.Log("[PC高性能小游戏] 删除旧的 EmbeddedAppletSDK 对象"); + GameObject.DestroyImmediate(oldSDK); + } + + // 检查是否已存在新的 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); + + 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_GAMEOBJECT_NAME} 并添加组件"); + } + else + { + Debug.LogError("[PC高性能小游戏] ❌ 找不到 WXPCHPInitScript 类型"); + GameObject.DestroyImmediate(sdkObject); + throw new BuildFailedException("[PC高性能小游戏] 无法找到 WXPCHPInitScript 组件"); + } + + EditorSceneManager.MarkSceneDirty(scene); + EditorSceneManager.SaveScene(scene); + RestoreScenes(currentScenes); + } + + private string GetFirstEnabledScene() + { + foreach (var scene in EditorBuildSettings.scenes) + { + if (scene.enabled) + { + return scene.path; + } + } + return null; + } + + private void RestoreScenes(UnityEditor.SceneManagement.SceneSetup[] setup) + { + if (setup != null && setup.Length > 0) + { + EditorSceneManager.RestoreSceneManagerSetup(setup); + } + } + } +} diff --git a/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs.meta b/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs.meta new file mode 100644 index 000000000..6e74db546 --- /dev/null +++ b/Editor/PCHighPerformance/PCHPBuildPreProcessor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b2764f66c7a7ee9dfaf53ffe5f6215d0 +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/PCHighPerformance/README_AutoInjection.md b/Editor/PCHighPerformance/README_AutoInjection.md new file mode 100644 index 000000000..f957d2041 --- /dev/null +++ b/Editor/PCHighPerformance/README_AutoInjection.md @@ -0,0 +1,110 @@ +# PC高性能小游戏 - 自动化构建注入 + +## 📂 文件结构 + +``` +WX-WASM-SDK-V2/ +├── Editor/PCHighPerformance/ +│ ├── PCHPBuildPreProcessor.cs # 构建预处理器(自动注入) +│ ├── PCHPDebugHelper.cs # 调试工具 +│ ├── WXPCSettingHelper.cs # 构建配置助手 +│ └── WXEditorPCHPWindow.cs # 编辑器窗口 +└── Runtime/ + └── WXPCHPInitScript.cs # SDK 运行时脚本 +``` + +--- + +## 🎯 功能说明 + +### 自动注入机制 + +**触发时机**:开发者点击「生成并转换」按钮,Unity 开始构建 Windows/macOS 平台前 + +**工作流程**: + +``` +构建开始 + ↓ +PCHPBuildPreProcessor.OnPreprocessBuild() 触发 + ↓ +Step 1: 检查 WXPCHPInitScript 是否已加载 + ├── 已加载 → 继续 + └── 未加载 → 报错中断(SDK 安装问题) + ↓ +Step 2: 打开首个启用场景 + ↓ +Step 3: 检查场景是否已有 "WXPCHPInitScript" GameObject + ├── 有 → 删除重建 + └── 没有 → 创建新 GameObject + 添加 WXPCHPInitScript 组件 + ↓ +Step 4: 保存场景并恢复原始布局 + ↓ +继续正常构建流程 +``` + +--- + +## ✅ 关键特性 + +1. **零侵入**:不修改开发者当前打开的场景 +2. **智能检测**:自动检测是否已存在脚本/对象 +3. **SDK 内置**:脚本位于 SDK Runtime 目录,无需复制到用户项目 +4. **命名空间隔离**:使用 `WeChatWASM` 命名空间避免冲突 + +--- + +## 🔧 配置说明 + +### 脚本位置 + +``` +Assets/WX-WASM-SDK-V2/Runtime/WXPCHPInitScript.cs +``` + +**类名**:`WeChatWASM.WXPCHPInitScript` + +**作用**:运行时初始化 PC 高性能小游戏 SDK,与宿主程序通信 + +--- + +## 🐛 常见问题 + +### Q: 为什么导出的工程没有 SDK 对象? + +检查 Console 日志: +- ✅ `[PC高性能小游戏] ✅ 已在 XXX 中创建 WXPCHPInitScript 并添加组件` → 成功 +- ⚠️ `找不到 WXPCHPInitScript 类型` → SDK 未正确安装 + +### Q: DLL 加载失败? + +**原因**:`direct_applet_sdk.dll` 必须在 **运行时** 的根目录(与 .exe 同级) + +**解决**:确保宿主程序启动时提供 DLL + +--- + +## 📝 技术细节 + +| 项 | 值 | +|---|---| +| 触发接口 | `IPreprocessBuildWithReport` | +| 回调优先级 | `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 +- ✅ 智能检测并复制模板脚本 +- ✅ 兼容 Windows 和 macOS 构建 diff --git a/Editor/PCHighPerformance/README_AutoInjection.md.meta b/Editor/PCHighPerformance/README_AutoInjection.md.meta new file mode 100644 index 000000000..f42ff1083 --- /dev/null +++ b/Editor/PCHighPerformance/README_AutoInjection.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aacc596790ffe1aad08acb624adcdfaa +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/PCHighPerformance/TROUBLESHOOTING.md b/Editor/PCHighPerformance/TROUBLESHOOTING.md new file mode 100644 index 000000000..6f2d05f13 --- /dev/null +++ b/Editor/PCHighPerformance/TROUBLESHOOTING.md @@ -0,0 +1,152 @@ +# PC高性能小游戏 - 问题排查指南 + +## 🐛 问题1:设置面板数据被清空 + +### 原因 +`OnLostFocus()` 时机不对,输入框的值可能还未同步到 `formInputData` + +### 解决方案 ✅ +已修复:在 `OnSettingsGUI()` 中添加 `GUI.changed` 检测,每次输入时自动保存 + +--- + +## 🐛 问题2:ShowInfo 逻辑未执行 + +### 可能原因 + +#### 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\\\Player.log` + - 搜索关键字: `[WXPCHPInitScript]` 或 `DllNotFoundException` + +--- + +#### 2. GameObject 未注入 (10%) +**症状**:构建后场景中没有 `WXPCHPInitScript` 对象 + +**验证**:使用调试工具 +``` +Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态 +``` + +**可能的问题**: +- ❌ Build Settings 中没有启用场景 +- ❌ 构建前 `PCHPBuildPreProcessor` 未执行 +- ❌ SDK 未正确安装 + +**解决**: +1. 确保 Build Settings 有至少一个启用场景 +2. 查看 Console 日志: + ``` + [PC高性能小游戏] 开始预处理构建... + [PC高性能小游戏] ✅ 已在 XXX 中创建 WXPCHPInitScript 并添加组件 + ``` + +--- + +## 🔍 调试步骤(按顺序) + +### Step 1: 检查 SDK 注入状态 +``` +Unity 菜单 → 微信小游戏 → PC高性能调试 → 检查SDK注入状态 +``` + +✅ 正常输出示例: +``` +[构建场景] 启用的场景数: 1 + ✅ 首场景: Assets/Scenes/Main.unity + ✅ 找到 SDK GameObject: WXPCHPInitScript + ✅ 挂载的脚本: WeChatWASM.WXPCHPInitScript + +[类型加载检查] + ✅ WXPCHPInitScript 类型已加载 + 程序集: WxWasmSDKRuntime +``` + +--- + +### Step 2: 检查导出路径 +``` +Unity 菜单 → 微信小游戏 → PC高性能调试 → 查看导出路径 +``` + +确认: +- ✅ 目录存在 +- ✅ 有 .exe 文件 + +--- + +### Step 3: 运行 .exe 并查看日志 + +**日志位置**: +``` +Windows: %APPDATA%\..\LocalLow\YourCompany\YourProduct\Player.log +Mac: ~/Library/Logs/Company Name/Product Name/Player.log +``` + +**搜索关键字**: +``` +[WXPCHPInitScript] +DllNotFoundException +InitEmbeddedGameSDK +``` + +**正常日志**: +``` +[WXPCHPInitScript] ========== Awake 被调用 ========== +[WXPCHPInitScript] GameObject 名称: WXPCHPInitScript +[WXPCHPInitScript] ========== 开始初始化 ========== +[WXPCHPInitScript] Step 1: 调用 InitEmbeddedGameSDK +[WXPCHPInitScript] 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 版本是否匹配 | +| `找不到 WXPCHPInitScript 类型` | SDK 未安装 | 重新导入 WX-WASM-SDK-V2 | +| `GetActiveWindow 返回空句柄` | 窗口未创建 | 延迟初始化或检查 Unity Player 设置 | diff --git a/Editor/PCHighPerformance/TROUBLESHOOTING.md.meta b/Editor/PCHighPerformance/TROUBLESHOOTING.md.meta new file mode 100644 index 000000000..2147b9adf --- /dev/null +++ b/Editor/PCHighPerformance/TROUBLESHOOTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b57398b893716f5822f5e196466fee6 +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/PCHighPerformance/WXApkgPacker.cs b/Editor/PCHighPerformance/WXApkgPacker.cs new file mode 100644 index 000000000..2b63f65cd --- /dev/null +++ b/Editor/PCHighPerformance/WXApkgPacker.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEngine; + +namespace WeChatWASM +{ + /// + /// wxapkg 文件打包器 + /// 将目录内容打包成 .wxapkg 格式 + /// + /// wxapkg 格式结构: + /// 1. 头部段 (14 字节) + /// - 起始标志: 1 字节 (0xBE) + /// - 未知字段: 4 字节 (固定为 0) + /// - 结束标志: 1 字节 (0xED) + /// - 索引段长度: 4 字节 (大端序) + /// - 数据段长度: 4 字节 (大端序) + /// 2. 索引段 + /// - 文件数量: 4 字节 (大端序) + /// - 文件信息块序列(每个文件): + /// - 文件名长度: 4 字节 (大端序) + /// - 文件名: 可变长度 (UTF-8) + /// - 文件偏移: 4 字节 (大端序) + /// - 文件长度: 4 字节 (大端序) + /// 3. 数据段 + /// - 实际文件内容的二进制数据 + /// + public static class WXApkgPacker + { + private const byte HEADER_MARK_START = 0xBE; + private const byte HEADER_MARK_END = 0xED; + private const int HEADER_SIZE = 14; + + /// + /// 文件信息结构 + /// + private class FileInfo + { + public string RelativePath; // 相对路径(以 / 开头) + public string FullPath; // 完整路径 + public int Size; // 文件大小 + public int Offset; // 在数据段中的偏移 + } + + /// + /// 将目录打包成 wxapkg 文件 + /// + /// 源目录路径 + /// 输出的 wxapkg 文件路径 + /// 是否成功 + public static bool Pack(string sourceDir, string outputPath) + { + try + { + if (!Directory.Exists(sourceDir)) + { + Debug.LogError($"[WXApkgPacker] 源目录不存在: {sourceDir}"); + return false; + } + + // 收集所有文件信息 + var files = CollectFiles(sourceDir); + if (files.Count == 0) + { + Debug.LogError($"[WXApkgPacker] 目录为空: {sourceDir}"); + return false; + } + + Debug.Log($"[WXApkgPacker] 收集到 {files.Count} 个文件"); + + // 构建索引段 + byte[] indexData = BuildIndexSection(files); + + // 构建数据段 + byte[] dataSection = BuildDataSection(files); + + // 构建头部 + byte[] header = BuildHeader(indexData.Length, dataSection.Length); + + // 确保输出目录存在 + string outputDir = Path.GetDirectoryName(outputPath); + if (!string.IsNullOrEmpty(outputDir) && !Directory.Exists(outputDir)) + { + Directory.CreateDirectory(outputDir); + } + + // 写入文件 + using (var fs = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) + { + fs.Write(header, 0, header.Length); + fs.Write(indexData, 0, indexData.Length); + fs.Write(dataSection, 0, dataSection.Length); + } + + long totalSize = header.Length + indexData.Length + dataSection.Length; + Debug.Log($"[WXApkgPacker] 打包完成: {outputPath}"); + Debug.Log($"[WXApkgPacker] 文件大小: {totalSize / 1024.0 / 1024.0:F2} MB"); + + return true; + } + catch (Exception e) + { + Debug.LogError($"[WXApkgPacker] 打包失败: {e.Message}"); + Debug.LogException(e); + return false; + } + } + + /// + /// 收集目录下所有文件 + /// + private static List CollectFiles(string sourceDir) + { + var files = new List(); + var allFiles = Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories); + + foreach (var filePath in allFiles) + { + // 跳过 .DS_Store 等隐藏文件 + string fileName = Path.GetFileName(filePath); + if (fileName.StartsWith(".")) + { + continue; + } + + // 计算相对路径(使用正斜杠,以 / 开头) + string relativePath = filePath.Substring(sourceDir.Length); + relativePath = relativePath.Replace('\\', '/'); + if (!relativePath.StartsWith("/")) + { + relativePath = "/" + relativePath; + } + + var info = new System.IO.FileInfo(filePath); + files.Add(new FileInfo + { + RelativePath = relativePath, + FullPath = filePath, + Size = (int)info.Length + }); + } + + // 按路径排序,保持一致性 + files.Sort((a, b) => string.Compare(a.RelativePath, b.RelativePath, StringComparison.Ordinal)); + + return files; + } + + /// + /// 构建头部段 (14 字节) + /// + private static byte[] BuildHeader(int indexLength, int dataLength) + { + byte[] header = new byte[HEADER_SIZE]; + + // 起始标志 + header[0] = HEADER_MARK_START; + + // 4 字节未知字段 (固定为 0) + header[1] = 0; + header[2] = 0; + header[3] = 0; + header[4] = 0; + + // 结束标志 + header[5] = HEADER_MARK_END; + + // 索引段长度 (大端序) + WriteInt32BE(header, 6, indexLength); + + // 数据段长度 (大端序) + WriteInt32BE(header, 10, dataLength); + + return header; + } + + /// + /// 构建索引段 + /// + private static byte[] BuildIndexSection(List files) + { + using (var ms = new MemoryStream()) + using (var writer = new BinaryWriter(ms)) + { + // 文件数量 (大端序) + WriteInt32BE(writer, files.Count); + + // 计算数据段起始偏移 + // 偏移量 = 头部大小 + 索引段大小 + // 需要先计算索引段大小 + int indexSize = 4; // 文件数量 + foreach (var file in files) + { + byte[] nameBytes = Encoding.UTF8.GetBytes(file.RelativePath); + indexSize += 4 + nameBytes.Length + 4 + 4; // nameLen + name + offset + size + } + + int dataOffset = HEADER_SIZE + indexSize; + + // 写入每个文件的索引信息 + foreach (var file in files) + { + byte[] nameBytes = Encoding.UTF8.GetBytes(file.RelativePath); + + // 文件名长度 (大端序) + WriteInt32BE(writer, nameBytes.Length); + + // 文件名 + writer.Write(nameBytes); + + // 文件偏移 (大端序) + file.Offset = dataOffset; + WriteInt32BE(writer, dataOffset); + + // 文件大小 (大端序) + WriteInt32BE(writer, file.Size); + + // 更新下一个文件的偏移 + dataOffset += file.Size; + } + + return ms.ToArray(); + } + } + + /// + /// 构建数据段 + /// + private static byte[] BuildDataSection(List files) + { + using (var ms = new MemoryStream()) + { + foreach (var file in files) + { + byte[] content = File.ReadAllBytes(file.FullPath); + ms.Write(content, 0, content.Length); + } + + return ms.ToArray(); + } + } + + /// + /// 写入 32 位大端序整数到字节数组 + /// + private static void WriteInt32BE(byte[] buffer, int offset, int value) + { + buffer[offset] = (byte)((value >> 24) & 0xFF); + buffer[offset + 1] = (byte)((value >> 16) & 0xFF); + buffer[offset + 2] = (byte)((value >> 8) & 0xFF); + buffer[offset + 3] = (byte)(value & 0xFF); + } + + /// + /// 写入 32 位大端序整数到流 + /// + private static void WriteInt32BE(BinaryWriter writer, int value) + { + writer.Write((byte)((value >> 24) & 0xFF)); + writer.Write((byte)((value >> 16) & 0xFF)); + writer.Write((byte)((value >> 8) & 0xFF)); + writer.Write((byte)(value & 0xFF)); + } + } +} diff --git a/Editor/PCHighPerformance/WXApkgPacker.cs.meta b/Editor/PCHighPerformance/WXApkgPacker.cs.meta new file mode 100644 index 000000000..97ceba53f --- /dev/null +++ b/Editor/PCHighPerformance/WXApkgPacker.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e11f366d21123f4877ec4ffbccebe4a +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/PCHighPerformance/WXPCHPBuildHelper.cs b/Editor/PCHighPerformance/WXPCHPBuildHelper.cs new file mode 100644 index 000000000..dd86ca67f --- /dev/null +++ b/Editor/PCHighPerformance/WXPCHPBuildHelper.cs @@ -0,0 +1,272 @@ +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build.Reporting; + +namespace WeChatWASM +{ + /// + /// PC高性能小游戏构建辅助类 + /// 用于在微信小游戏转换工具面板中集成PC高性能模式构建 + /// + public static class WXPCHPBuildHelper + { + /// + /// PC高性能构建产物目录名 + /// + public const string PCHPOutputDir = "pchpcode"; + + /// + /// 检查是否开启了PC高性能模式 + /// + public static bool IsPCHighPerformanceEnabled() + { + var config = UnityUtil.GetEditorConf(); + bool enabled = config != null && config.ProjectConf.EnablePCHighPerformance; + Debug.Log($"[PC高性能模式] 检查配置: config={config != null}, EnablePCHighPerformance={config?.ProjectConf?.EnablePCHighPerformance}, 结果={enabled}"); + return enabled; + } + + /// + /// 执行PC高性能构建 + /// + /// 导出基础路径(来自小游戏面板配置) + /// 构建是否成功 + public static bool BuildPCHighPerformance(string exportBasePath) + { + if (string.IsNullOrEmpty(exportBasePath)) + { + Debug.LogError("[PC高性能模式] 导出路径为空,无法构建"); + return false; + } + + // 确定构建目标平台 + var currentPlatform = Application.platform; + BuildTarget buildTarget; + string platformName; + + if (currentPlatform == RuntimePlatform.OSXEditor) + { + buildTarget = BuildTarget.StandaloneOSX; + platformName = "Mac"; + } + else + { + buildTarget = BuildTarget.StandaloneWindows64; + platformName = "Windows"; + } + + // 构建输出路径:直接放在 minigame/pchpcode 目录下 + string pchpOutputPath = Path.Combine(exportBasePath, WXConvertCore.miniGameDir, PCHPOutputDir); + + Debug.Log($"[PC高性能模式] 开始构建,目标平台: {platformName}"); + Debug.Log($"[PC高性能模式] 输出路径: {pchpOutputPath}"); + + // 保存当前构建目标 + var originalTarget = EditorUserBuildSettings.activeBuildTarget; + var originalTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; + + try + { + // 切换构建目标(如果需要) + if (originalTarget != buildTarget) + { + Debug.Log($"[PC高性能模式] 切换构建目标: {originalTarget} -> {buildTarget}"); + if (!EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone, buildTarget)) + { + Debug.LogError("[PC高性能模式] 切换构建目标失败"); + return false; + } + } + + // 配置 Player Settings + ConfigurePlayerSettings(); + + // 确保输出目录存在 + if (!Directory.Exists(pchpOutputPath)) + { + Directory.CreateDirectory(pchpOutputPath); + } + + // 获取可执行文件路径 + string executablePath = GetExecutablePath(pchpOutputPath, buildTarget); + + // 获取场景列表 + var scenes = GetEnabledScenes(); + if (scenes.Length == 0) + { + Debug.LogError("[PC高性能模式] 没有启用的场景,请在 Build Settings 中添加场景"); + EditorUtility.DisplayDialog("PC高性能模式构建失败", "没有启用的场景,请在 Build Settings 中添加场景", "确定"); + return false; + } + + // 构建选项 + var buildOptions = BuildOptions.None; + + // 执行构建 + Debug.Log($"[PC高性能模式] 执行构建,输出: {executablePath}"); + var report = BuildPipeline.BuildPlayer(scenes, executablePath, buildTarget, buildOptions); + + // 检查构建结果 + if (report.summary.result == BuildResult.Succeeded) + { + Debug.Log($"[PC高性能模式] 构建成功! 耗时: {report.summary.totalTime.TotalSeconds:F2}秒"); + Debug.Log($"[PC高性能模式] 输出路径: {pchpOutputPath}"); + + // 打包成 wxapkg 格式(先打包到临时位置) + string tempWxapkgPath = Path.Combine(exportBasePath, WXConvertCore.miniGameDir, $"{PCHPOutputDir}_temp.wxapkg"); + string finalWxapkgPath = Path.Combine(pchpOutputPath, $"{PCHPOutputDir}.wxapkg"); + + Debug.Log($"[PC高性能模式] 开始打包 wxapkg..."); + + if (WXApkgPacker.Pack(pchpOutputPath, tempWxapkgPath)) + { + // 删除原始构建材料 + Debug.Log($"[PC高性能模式] 清理原始构建材料..."); + Directory.Delete(pchpOutputPath, true); + + // 重新创建目录并移动 wxapkg + Directory.CreateDirectory(pchpOutputPath); + File.Move(tempWxapkgPath, finalWxapkgPath); + + Debug.Log($"[PC高性能模式] wxapkg 打包完成: {finalWxapkgPath}"); + } + else + { + Debug.LogWarning("[PC高性能模式] wxapkg 打包失败,保留原始构建产物"); + if (File.Exists(tempWxapkgPath)) + { + File.Delete(tempWxapkgPath); + } + } + + return true; + } + else + { + Debug.LogError($"[PC高性能模式] 构建失败: {report.summary.result}"); + foreach (var step in report.steps) + { + foreach (var message in step.messages) + { + if (message.type == LogType.Error) + { + Debug.LogError($"[PC高性能模式] 构建错误: {message.content}"); + } + } + } + return false; + } + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能模式] 构建异常: {e.Message}"); + Debug.LogException(e); + return false; + } + finally + { + // 始终恢复到 WebGL 构建目标,确保微信小游戏转换工具能正常加载 + if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebGL) + { + Debug.Log($"[PC高性能模式] 切换回 WebGL 构建目标"); + EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.WebGL, BuildTarget.WebGL); + } + } + } + + /// + /// 配置 Player Settings 用于 PC 高性能构建 + /// + private static void ConfigurePlayerSettings() + { + // 设置窗口模式 + PlayerSettings.fullScreenMode = FullScreenMode.Windowed; + + // 设置默认分辨率 + PlayerSettings.defaultScreenWidth = 1280; + PlayerSettings.defaultScreenHeight = 720; + + // 允许调整窗口大小 + PlayerSettings.resizableWindow = true; + + // 处理 Windows 上 Linear 色彩空间与图形 API 的兼容性问题 + if (Application.platform == RuntimePlatform.WindowsEditor) + { + ConfigureWindowsGraphicsAPI(); + } + + Debug.Log("[PC高性能模式] Player Settings 配置完成"); + } + + /// + /// 配置 Windows 图形 API,解决 Linear 色彩空间兼容性问题 + /// + private static void ConfigureWindowsGraphicsAPI() + { + // 检查当前色彩空间 + bool isLinear = PlayerSettings.colorSpace == ColorSpace.Linear; + + if (isLinear) + { + // Linear 色彩空间需要 DX11 或更高版本 + // 禁用自动图形 API,手动指定兼容的 API + PlayerSettings.SetUseDefaultGraphicsAPIs(BuildTarget.StandaloneWindows64, false); + + var graphicsAPIs = new UnityEngine.Rendering.GraphicsDeviceType[] + { + UnityEngine.Rendering.GraphicsDeviceType.Direct3D11, + UnityEngine.Rendering.GraphicsDeviceType.Direct3D12, + UnityEngine.Rendering.GraphicsDeviceType.Vulkan + }; + + PlayerSettings.SetGraphicsAPIs(BuildTarget.StandaloneWindows64, graphicsAPIs); + Debug.Log("[PC高性能模式] 已配置 Windows 图形 API: D3D11, D3D12, Vulkan(Linear 色彩空间兼容)"); + } + else + { + // Gamma 色彩空间,使用默认图形 API 即可 + PlayerSettings.SetUseDefaultGraphicsAPIs(BuildTarget.StandaloneWindows64, true); + Debug.Log("[PC高性能模式] 使用默认 Windows 图形 API(Gamma 色彩空间)"); + } + } + + /// + /// 获取可执行文件路径 + /// + private static string GetExecutablePath(string outputPath, BuildTarget target) + { + string productName = PlayerSettings.productName; + if (string.IsNullOrEmpty(productName)) + { + productName = "Game"; + } + + if (target == BuildTarget.StandaloneOSX) + { + return Path.Combine(outputPath, $"{productName}.app"); + } + else + { + return Path.Combine(outputPath, $"{productName}.exe"); + } + } + + /// + /// 获取启用的场景列表 + /// + private static string[] GetEnabledScenes() + { + var scenes = new List(); + foreach (var scene in EditorBuildSettings.scenes) + { + if (scene.enabled) + { + scenes.Add(scene.path); + } + } + return scenes.ToArray(); + } + } +} diff --git a/Editor/PCHighPerformance/WXPCHPBuildHelper.cs.meta b/Editor/PCHighPerformance/WXPCHPBuildHelper.cs.meta new file mode 100644 index 000000000..1d14e1083 --- /dev/null +++ b/Editor/PCHighPerformance/WXPCHPBuildHelper.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1455a91f4635862b70423ea92eff07bb +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/PCHighPerformance/WXPCSettingHelper.cs b/Editor/PCHighPerformance/WXPCSettingHelper.cs new file mode 100644 index 000000000..833744d97 --- /dev/null +++ b/Editor/PCHighPerformance/WXPCSettingHelper.cs @@ -0,0 +1,676 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build.Reporting; +using System.IO; + +namespace WeChatWASM +{ + + [InitializeOnLoad] + public class WXPCSettingsHelperInterface + { + public static WXPCSettingHelper helper = new WXPCSettingHelper(); + } + + public class WXPCSettingHelper + { + public static string projectRootPath; + + public WXPCSettingHelper() + { + projectRootPath = Path.GetFullPath(Application.dataPath + "/../"); + } + + // UI 状态 + private Vector2 scrollRoot; + private bool foldBaseInfo = true; + + // 表单数据 + private Dictionary formInputData = new Dictionary(); + + // 配置文件路径 + private string ConfigFilePath => Path.Combine(Application.dataPath, "WX-WASM-SDK-V2", "Editor", "PCHighPerformance", "PCHPConfig.json"); + + public void OnFocus() + { + LoadData(); + } + + public void OnLostFocus() + { + SaveData(); + } + + public void OnDisable() + { + SaveData(); + } + + public void OnSettingsGUI(EditorWindow window) + { + scrollRoot = EditorGUILayout.BeginScrollView(scrollRoot); + + // 基本信息区域 + foldBaseInfo = EditorGUILayout.Foldout(foldBaseInfo, "基本信息"); + if (foldBaseInfo) + { + EditorGUILayout.BeginVertical("frameBox", GUILayout.ExpandWidth(true)); + + // 游戏AppID - 必填项 + FormInput("appId", "游戏AppID *", "必填项,微信小游戏的AppID"); + + // 小游戏项目名 - 非必填项 + FormInput("projectName", "项目名(?)", "非必填项,用于设置导出的运行启动器名称,留空则使用Unity项目名"); + + // 导出路径 - 支持相对路径和选择目录 + FormInputWithFolderSelectorAndHelp("exportPath", "导出路径", "支持输入相对于项目根目录的相对路径,如 wxbuild"); + + EditorGUILayout.EndVertical(); + } + + EditorGUILayout.EndScrollView(); + + // 检测 GUI 变化并自动保存 + if (GUI.changed) + { + SaveData(); + } + } + + public void OnBuildButtonGUI(EditorWindow window) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + // 生成并转换按钮 + if (GUILayout.Button("生成并转换", GUILayout.Width(120), GUILayout.Height(30))) + { + OnBuildButtonClicked(window); + } + + EditorGUILayout.EndHorizontal(); + + GUILayout.Space(10); + } + + /// + /// 点击生成并转换按钮 + /// + private void OnBuildButtonClicked(EditorWindow window) + { + // 验证必填项 + var appId = GetDataInput("appId"); + if (string.IsNullOrEmpty(appId.Trim())) + { + EditorUtility.DisplayDialog("错误", "请填写游戏AppID", "确定"); + return; + } + + SaveData(); + + // 获取当前运行平台 + var currentPlatform = GetCurrentPlatform(); + Debug.Log($"[PC高性能小游戏] 当前运行平台: {currentPlatform}"); + + // 根据平台设置构建目标 + SetBuildTargetForPlatform(currentPlatform); + + // 配置 Player Settings + ConfigurePlayerSettings(); + + // 实现PC高性能小游戏的转换逻辑 + Debug.Log($"[PC高性能小游戏] 开始转换,AppID: {appId}"); + + // 根据平台执行构建 + BuildForPlatform(currentPlatform); + } + + /// + /// 获取当前运行平台 + /// + private RuntimePlatform GetCurrentPlatform() + { + return Application.platform; + } + + /// + /// 判断当前是否为 Windows 平台 + /// + private bool IsWindowsPlatform() + { + return Application.platform == RuntimePlatform.WindowsEditor || + Application.platform == RuntimePlatform.WindowsPlayer; + } + + /// + /// 判断当前是否为 Mac 平台 + /// + private bool IsMacPlatform() + { + return Application.platform == RuntimePlatform.OSXEditor || + Application.platform == RuntimePlatform.OSXPlayer; + } + + /// + /// 根据平台设置构建目标 + /// + private void SetBuildTargetForPlatform(RuntimePlatform platform) + { + if (IsMacPlatform()) + { + SetBuildTargetToMac(); + } + else + { + // 默认使用 Windows + SetBuildTargetToWindows(); + } + } + + /// + /// 根据平台执行构建 + /// + private void BuildForPlatform(RuntimePlatform platform) + { + if (IsMacPlatform()) + { + BuildForMac(); + } + else + { + // 默认使用 Windows + BuildForWindows(); + } + } + + /// + /// 设置构建目标为 Windows + /// + private void SetBuildTargetToWindows() + { + try + { + var currentTarget = EditorUserBuildSettings.activeBuildTarget; + var targetGroup = BuildTargetGroup.Standalone; + var buildTarget = BuildTarget.StandaloneWindows64; + + if (currentTarget != buildTarget) + { + Debug.Log("[PC高性能小游戏] 切换构建目标到 Windows x64"); + EditorUserBuildSettings.SwitchActiveBuildTarget(targetGroup, buildTarget); + } + else + { + Debug.Log("[PC高性能小游戏] 构建目标已经是 Windows x64"); + } + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能小游戏] 设置构建目标失败: {e.Message}"); + } + } + + /// + /// 设置构建目标为 Mac + /// + private void SetBuildTargetToMac() + { + try + { + var currentTarget = EditorUserBuildSettings.activeBuildTarget; + var targetGroup = BuildTargetGroup.Standalone; + var buildTarget = BuildTarget.StandaloneOSX; + + if (currentTarget != buildTarget) + { + Debug.Log("[PC高性能小游戏] 切换构建目标到 macOS"); + EditorUserBuildSettings.SwitchActiveBuildTarget(targetGroup, buildTarget); + } + else + { + Debug.Log("[PC高性能小游戏] 构建目标已经是 macOS"); + } + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能小游戏] 设置构建目标失败: {e.Message}"); + } + } + + /// + /// 配置 Player Settings + /// + private void ConfigurePlayerSettings() + { + try + { + Debug.Log("[PC高性能小游戏] 配置 Player Settings"); + + // 设置 Fullscreen Mode 为 Windowed + PlayerSettings.fullScreenMode = FullScreenMode.Windowed; + + // 可选:设置默认窗口分辨率 + PlayerSettings.defaultScreenWidth = 1280; + PlayerSettings.defaultScreenHeight = 720; + + // 可选:允许用户调整窗口大小 + PlayerSettings.resizableWindow = true; + + // 保存设置 + AssetDatabase.SaveAssets(); + + Debug.Log("[PC高性能小游戏] Player Settings 配置完成"); + Debug.Log($"[PC高性能小游戏] Fullscreen Mode: {PlayerSettings.fullScreenMode}"); + Debug.Log($"[PC高性能小游戏] 默认分辨率: {PlayerSettings.defaultScreenWidth}x{PlayerSettings.defaultScreenHeight}"); + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能小游戏] 配置 Player Settings 失败: {e.Message}"); + } + } + + /// + /// 执行 Windows 构建 + /// + private void BuildForWindows() + { + try + { + var appId = GetDataInput("appId"); + var buildPath = GetBuildPath("PC", appId); + + // 确保构建目录存在 + if (!Directory.Exists(buildPath)) + { + Directory.CreateDirectory(buildPath); + } + + var executablePath = Path.Combine(buildPath, $"{GetProductName()}.exe"); + + // 获取当前场景列表 + var scenes = new List(); + foreach (var scene in EditorBuildSettings.scenes) + { + if (scene.enabled) + { + scenes.Add(scene.path); + } + } + + if (scenes.Count == 0) + { + Debug.LogWarning("[PC高性能小游戏] 没有启用的场景,请在 Build Settings 中添加场景"); + EditorUtility.DisplayDialog("警告", "没有启用的场景,请在 Build Settings 中添加场景", "确定"); + return; + } + + // 构建选项 + var buildOptions = BuildOptions.None; + + Debug.Log($"[PC高性能小游戏] 开始构建到: {executablePath}"); + Debug.Log($"[PC高性能小游戏] 使用项目名称: {GetProductName()}"); + + // 执行构建 + var report = BuildPipeline.BuildPlayer(scenes.ToArray(), executablePath, BuildTarget.StandaloneWindows64, buildOptions); + + // 检查构建结果 + if (report.summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded) + { + Debug.Log($"[PC高性能小游戏] 构建成功! 输出路径: {buildPath}"); + EditorUtility.DisplayDialog("构建成功", $"PC高性能小游戏构建完成!\n\n输出路径:\n{buildPath}", "确定"); + + // 可选:打开构建目录 + if (EditorUtility.DisplayDialog("打开目录", "是否打开构建输出目录?", "是", "否")) + { + EditorUtility.RevealInFinder(buildPath); + } + } + else + { + Debug.LogError($"[PC高性能小游戏] 构建失败: {report.summary.result}"); + EditorUtility.DisplayDialog("构建失败", $"构建过程中出现错误:\n{report.summary.result}", "确定"); + } + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能小游戏] 构建异常: {e.Message}"); + EditorUtility.DisplayDialog("构建异常", $"构建过程中发生异常:\n{e.Message}", "确定"); + } + } + + /// + /// 执行 Mac 构建 + /// + private void BuildForMac() + { + try + { + var appId = GetDataInput("appId"); + var buildPath = GetBuildPath("Mac", appId); + + // 确保构建目录存在 + if (!Directory.Exists(buildPath)) + { + Directory.CreateDirectory(buildPath); + } + + // Mac 应用程序是 .app 包 + var executablePath = Path.Combine(buildPath, $"{GetProductName()}.app"); + + // 获取当前场景列表 + var scenes = new List(); + foreach (var scene in EditorBuildSettings.scenes) + { + if (scene.enabled) + { + scenes.Add(scene.path); + } + } + + if (scenes.Count == 0) + { + Debug.LogWarning("[PC高性能小游戏] 没有启用的场景,请在 Build Settings 中添加场景"); + EditorUtility.DisplayDialog("警告", "没有启用的场景,请在 Build Settings 中添加场景", "确定"); + return; + } + + // 构建选项 + var buildOptions = BuildOptions.None; + + Debug.Log($"[PC高性能小游戏] 开始构建 macOS 应用到: {executablePath}"); + Debug.Log($"[PC高性能小游戏] 使用项目名称: {GetProductName()}"); + + // 执行构建 + var report = BuildPipeline.BuildPlayer(scenes.ToArray(), executablePath, BuildTarget.StandaloneOSX, buildOptions); + + // 检查构建结果 + if (report.summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded) + { + Debug.Log($"[PC高性能小游戏] macOS 构建成功! 输出路径: {buildPath}"); + EditorUtility.DisplayDialog("构建成功", $"PC高性能小游戏 macOS 构建完成!\n\n输出路径:\n{buildPath}", "确定"); + + // 可选:打开构建目录 + if (EditorUtility.DisplayDialog("打开目录", "是否打开构建输出目录?", "是", "否")) + { + EditorUtility.RevealInFinder(buildPath); + } + } + else + { + Debug.LogError($"[PC高性能小游戏] macOS 构建失败: {report.summary.result}"); + EditorUtility.DisplayDialog("构建失败", $"构建过程中出现错误:\n{report.summary.result}", "确定"); + } + } + catch (System.Exception e) + { + Debug.LogError($"[PC高性能小游戏] macOS 构建异常: {e.Message}"); + EditorUtility.DisplayDialog("构建异常", $"构建过程中发生异常:\n{e.Message}", "确定"); + } + } + + /// + /// 获取构建输出路径 + /// + private string GetBuildPath(string platformName, string appId) + { + var exportPath = GetDataInput("exportPath"); + + // 如果用户指定了导出路径 + if (!string.IsNullOrEmpty(exportPath)) + { + // 判断是否为绝对路径 + if (Path.IsPathRooted(exportPath)) + { + return Path.Combine(exportPath, platformName, appId); + } + else + { + // 相对路径,相对于项目根目录 + return Path.Combine(projectRootPath, exportPath, platformName, appId); + } + } + + // 默认路径:{projectRoot}/Build/{Platform}/{AppID} + return Path.Combine(projectRootPath, "Build", platformName, appId); + } + + /// + /// 获取产品名称(优先使用用户配置的名称,否则使用Unity项目名) + /// + private string GetProductName() + { + var projectName = GetDataInput("projectName"); + if (!string.IsNullOrEmpty(projectName)) + { + return projectName.Trim(); + } + return PlayerSettings.productName; + } + + /// + /// 加载配置数据 + /// + private void LoadData() + { + if (File.Exists(ConfigFilePath)) + { + try + { + var json = File.ReadAllText(ConfigFilePath); + var config = JsonUtility.FromJson(json); + if (config != null) + { + SetData("appId", config.appId ?? ""); + SetData("projectName", config.projectName ?? ""); + SetData("exportPath", config.exportPath ?? ""); + } + } + catch (System.Exception e) + { + Debug.LogWarning($"[PC高性能小游戏] 加载配置失败: {e.Message}"); + } + } + else + { + // 初始化默认值 + SetData("appId", ""); + SetData("projectName", ""); + SetData("exportPath", ""); + } + } + + /// + /// 保存配置数据 + /// + private void SaveData() + { + try + { + var config = new PCHPConfigData + { + appId = GetDataInput("appId"), + projectName = GetDataInput("projectName"), + exportPath = GetDataInput("exportPath") + }; + + var directory = Path.GetDirectoryName(ConfigFilePath); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + var json = JsonUtility.ToJson(config, true); + File.WriteAllText(ConfigFilePath, json); + } + catch (System.Exception e) + { + Debug.LogWarning($"[PC高性能小游戏] 保存配置失败: {e.Message}"); + } + } + + /// + /// 获取输入框数据 + /// + private string GetDataInput(string target) + { + if (formInputData.ContainsKey(target)) + { + return formInputData[target]; + } + return ""; + } + + /// + /// 设置数据 + /// + private void SetData(string target, string value) + { + if (formInputData.ContainsKey(target)) + { + formInputData[target] = value; + } + else + { + formInputData.Add(target, value); + } + } + + /// + /// 绘制输入框 + /// + private void FormInput(string target, string label, string help = null) + { + if (!formInputData.ContainsKey(target)) + { + formInputData[target] = ""; + } + + GUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(10)); + + if (help == null) + { + GUILayout.Label(label, GUILayout.Width(140)); + } + else + { + GUILayout.Label(new GUIContent(label, help), GUILayout.Width(140)); + } + + formInputData[target] = GUILayout.TextField(formInputData[target], GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 195)); + GUILayout.EndHorizontal(); + } + + /// + /// 绘制带文件夹选择器的输入框 + /// + private void FormInputWithFolderSelector(string target, string label, string help = null) + { + if (!formInputData.ContainsKey(target)) + { + formInputData[target] = ""; + } + + GUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(10)); + + if (help == null) + { + GUILayout.Label(label, GUILayout.Width(140)); + } + else + { + GUILayout.Label(new GUIContent(label, help), GUILayout.Width(140)); + } + + // 输入框 + formInputData[target] = GUILayout.TextField(formInputData[target], GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 275)); + + // 选择按钮 + if (GUILayout.Button("选择", GUILayout.Width(60))) + { + var selectedPath = EditorUtility.OpenFolderPanel("选择导出目录", projectRootPath, ""); + if (!string.IsNullOrEmpty(selectedPath)) + { + // 尝试转换为相对路径 + if (selectedPath.StartsWith(projectRootPath)) + { + var relativePath = selectedPath.Substring(projectRootPath.Length); + if (relativePath.StartsWith("/") || relativePath.StartsWith("\\")) + { + relativePath = relativePath.Substring(1); + } + formInputData[target] = relativePath; + } + else + { + // 使用绝对路径 + formInputData[target] = selectedPath; + } + } + } + + GUILayout.EndHorizontal(); + } + + /// + /// 绘制带文件夹选择器和帮助提示的输入框 + /// + private void FormInputWithFolderSelectorAndHelp(string target, string label, string help = null) + { + if (!formInputData.ContainsKey(target)) + { + formInputData[target] = ""; + } + + GUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(10)); + + // 标题(带问号和 Tooltip) + var displayLabel = help == null ? label : $"{label}(?)"; + GUILayout.Label(new GUIContent(displayLabel, help), GUILayout.Width(140)); + + // 输入框 + formInputData[target] = GUILayout.TextField(formInputData[target], GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 275)); + + // 选择按钮 + if (GUILayout.Button("选择", GUILayout.Width(60))) + { + var selectedPath = EditorUtility.OpenFolderPanel("选择导出目录", projectRootPath, ""); + if (!string.IsNullOrEmpty(selectedPath)) + { + // 尝试转换为相对路径 + if (selectedPath.StartsWith(projectRootPath)) + { + var relativePath = selectedPath.Substring(projectRootPath.Length); + if (relativePath.StartsWith("/") || relativePath.StartsWith("\\")) + { + relativePath = relativePath.Substring(1); + } + formInputData[target] = relativePath; + } + else + { + // 使用绝对路径 + formInputData[target] = selectedPath; + } + } + } + + GUILayout.EndHorizontal(); + } + + } + + /// + /// PC高性能小游戏配置数据类 + /// + [System.Serializable] + public class PCHPConfigData + { + public string appId; + public string projectName; + public string exportPath; + } +} diff --git a/Editor/PCHighPerformance/WXPCSettingHelper.cs.meta b/Editor/PCHighPerformance/WXPCSettingHelper.cs.meta new file mode 100644 index 000000000..825fdfea3 --- /dev/null +++ b/Editor/PCHighPerformance/WXPCSettingHelper.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 769878c6cc6489f59f3bca6835614c27 +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Editor/WXConvertCore.cs b/Editor/WXConvertCore.cs index 08f39476d..e4e0f6db0 100644 --- a/Editor/WXConvertCore.cs +++ b/Editor/WXConvertCore.cs @@ -273,6 +273,24 @@ namespace WeChatWASM finishExport(); } } + + // PC高性能模式:在小游戏构建完成后构建PC版本 + if (buildWebGL && WXPCHPBuildHelper.IsPCHighPerformanceEnabled()) + { + Debug.Log("[微信小游戏] 小游戏构建完成,开始构建PC高性能版本..."); + + if (!WXPCHPBuildHelper.BuildPCHighPerformance(config.ProjectConf.DST)) + { + Debug.LogError("[微信小游戏] PC高性能模式构建失败"); + EditorUtility.DisplayDialog("PC高性能模式构建失败", + "PC高性能版本构建失败,但小游戏版本已构建成功。", "确定"); + } + else + { + Debug.Log("[微信小游戏] PC高性能版本构建完成!"); + } + } + return WXExportError.SUCCEED; } diff --git a/Editor/WXEditorSettingHelper.cs b/Editor/WXEditorSettingHelper.cs index a7f7417b2..cd45f7113 100644 --- a/Editor/WXEditorSettingHelper.cs +++ b/Editor/WXEditorSettingHelper.cs @@ -121,6 +121,14 @@ namespace WeChatWASM EditorGUILayout.EndVertical(); } + foldPCHighPerformance = EditorGUILayout.Foldout(foldPCHighPerformance, "PC高性能模式选项"); + if (foldPCHighPerformance) + { + EditorGUILayout.BeginVertical("frameBox", GUILayout.ExpandWidth(true)); + OnSettingPCHighPerformance(); + EditorGUILayout.EndVertical(); + } + foldDebugOptions = EditorGUILayout.Foldout(foldDebugOptions, "调试编译选项"); if (foldDebugOptions) { @@ -233,6 +241,14 @@ namespace WeChatWASM EditorGUILayout.EndVertical(); } + foldPCHighPerformance = EditorGUILayout.Foldout(foldPCHighPerformance, "PC高性能模式"); + if (foldPCHighPerformance) + { + EditorGUILayout.BeginVertical("frameBox", GUILayout.ExpandWidth(true)); + OnSettingPCHighPerformance(); + EditorGUILayout.EndVertical(); + } + foldDebugOptions = EditorGUILayout.Foldout(foldDebugOptions, "调试编译选项"); if (foldDebugOptions) { @@ -374,6 +390,11 @@ namespace WeChatWASM formCheckbox("disableMultiTouch", "禁止多点触控"); } + private void OnSettingPCHighPerformance() + { + formCheckbox("enablePCHighPerformance", "PC高性能模式(?)", "勾选后将在构建时同时构建PC端高性能版本,构建产物会放到导出路径下的PCHP目录"); + } + private void OnSettingDebugOptions(bool showDevBuild) { EditorGUILayout.BeginVertical("frameBox", GUILayout.ExpandWidth(true)); @@ -519,6 +540,7 @@ namespace WeChatWASM private bool foldBaseInfo = true; private bool foldLoadingConfig = true; private bool foldSDKOptions = true; + private bool foldPCHighPerformance = true; private bool foldDebugOptions = true; private bool foldInstantGame = false; private bool foldFontOptions = false; @@ -657,6 +679,7 @@ namespace WeChatWASM this.setData("loadingBarWidth", ProjectConf.loadingBarWidth.ToString()); this.setData("needCheckUpdate", ProjectConf.needCheckUpdate); this.setData("disableHighPerformanceFallback", ProjectConf.disableHighPerformanceFallback); + this.setData("enablePCHighPerformance", ProjectConf.EnablePCHighPerformance); } private void loadSDKOptionsData(SDKOptions SDKOptions) @@ -784,6 +807,7 @@ namespace WeChatWASM ProjectConf.loadingBarWidth = int.Parse(this.getDataInput("loadingBarWidth")); ProjectConf.needCheckUpdate = this.getDataCheckbox("needCheckUpdate"); ProjectConf.disableHighPerformanceFallback = this.getDataCheckbox("disableHighPerformanceFallback"); + ProjectConf.EnablePCHighPerformance = this.getDataCheckbox("enablePCHighPerformance"); } private void saveSDKOptionsData(SDKOptions SDKOptions) @@ -873,6 +897,7 @@ namespace WeChatWASM _ProjectConf.loadingBarWidth = ProjectConf.FindPropertyRelative("loadingBarWidth").intValue; _ProjectConf.needCheckUpdate = ProjectConf.FindPropertyRelative("needCheckUpdate").boolValue; _ProjectConf.disableHighPerformanceFallback = ProjectConf.FindPropertyRelative("disableHighPerformanceFallback").boolValue; + _ProjectConf.EnablePCHighPerformance = ProjectConf.FindPropertyRelative("EnablePCHighPerformance").boolValue; } private void serializeProjectConf(WXProjectConf _ProjectConf, SerializedProperty ProjectConf) { @@ -902,6 +927,7 @@ namespace WeChatWASM ProjectConf.FindPropertyRelative("loadingBarWidth").intValue = _ProjectConf.loadingBarWidth; ProjectConf.FindPropertyRelative("needCheckUpdate").boolValue = _ProjectConf.needCheckUpdate; ProjectConf.FindPropertyRelative("disableHighPerformanceFallback").boolValue = _ProjectConf.disableHighPerformanceFallback; + ProjectConf.FindPropertyRelative("EnablePCHighPerformance").boolValue = _ProjectConf.EnablePCHighPerformance; //miniGameProperty.FindPropertyRelative("m_AutomaticFillInstantGame").boolValue = getDataCheckbox("m_AutomaticFillInstantGame"); diff --git a/Editor/WXPluginVersion.cs b/Editor/WXPluginVersion.cs index 1daae2571..bc1bb2af3 100644 --- a/Editor/WXPluginVersion.cs +++ b/Editor/WXPluginVersion.cs @@ -2,7 +2,7 @@ namespace WeChatWASM { public class WXPluginVersion { - public static string pluginVersion = "202603160259"; // 这一行不要改他,导出的时候会自动替换 + public static string pluginVersion = "202603200506"; // 这一行不要改他,导出的时候会自动替换 } public class WXPluginConf diff --git a/Editor/wx-editor.dll b/Editor/wx-editor.dll index 4443e0e0d886bd50d8a7e064c9879e97cdf53277..21f27dd0b4da9017ad3749aadb31751a8ab0eb50 100644 GIT binary patch delta 51677 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 + + + 是否开启PC高性能模式 + + 自动将图片尺寸减小一半 diff --git a/Editor/wx-editor.xml.meta b/Editor/wx-editor.xml.meta index a1b05c6cb..796acb9cb 100644 --- a/Editor/wx-editor.xml.meta +++ b/Editor/wx-editor.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7330c57dbe403f6a6825fe311f4436ca +guid: 6dc1e62c5cf069aafd88c67c32567958 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/Examples.meta b/Runtime/Examples.meta new file mode 100644 index 000000000..8ba61514b --- /dev/null +++ b/Runtime/Examples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee6cc3036f15f17699cd0862166e6e81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Examples/PCHPTestExample.cs b/Runtime/Examples/PCHPTestExample.cs new file mode 100644 index 000000000..7a3e705e0 --- /dev/null +++ b/Runtime/Examples/PCHPTestExample.cs @@ -0,0 +1,257 @@ +using UnityEngine; +using WeChatWASM; + +namespace WeChatWASM.Examples +{ + /// + /// PC高性能小游戏通信测试示例 + /// + /// 通信链路: + /// 1. C# 调用 ShowToast + /// 2. WXPCHPInitScript.CallWXAPI 构建 PCHPRequestMessage + /// 3. SendMsgAsync -> direct_applet_sdk.dll -> 内核 + /// 4. 内核 -> 基础库 pc-adapter -> game.js + /// 5. game.js 执行 wx.showToast + /// 6. 回调 -> 基础库 -> 内核 -> DLL -> HandleAsyncMessage + /// 7. 解析 PCHPResponseMessage -> 触发 C# 回调 + /// + public class PCHPTestExample : MonoBehaviour + { + private WXPCHighPerformanceManager _pcManager; + + private void Start() + { + Debug.Log("[PCHPTestExample] Start - 获取 PC 高性能管理器"); + +#if UNITY_STANDALONE_WIN + _pcManager = WX.GetPCHighPerformanceManager(); + + if (_pcManager != null && _pcManager.IsSupported) + { + Debug.Log("[PCHPTestExample] PC 高性能模式已支持!"); + } + else + { + Debug.LogWarning("[PCHPTestExample] PC 高性能模式不可用"); + } +#else + Debug.Log("[PCHPTestExample] 当前平台非 Windows,PC 高性能模式不可用"); +#endif + } + + /// + /// 测试 ShowToast - 在 Inspector 中调用或通过 UI 按钮调用 + /// + [ContextMenu("Test ShowToast")] + public void TestShowToast() + { + if (_pcManager == null || !_pcManager.IsSupported) + { + Debug.LogError("[PCHPTestExample] PC 高性能模式不可用"); + return; + } + + Debug.Log("[PCHPTestExample] 调用 ShowToast..."); + + _pcManager.ShowToast( + new PCHPShowToastOption + { + title = "Hello from Unity!", + icon = "success", + duration = 2000, + mask = false + }, + success: (res) => + { + Debug.Log($"[PCHPTestExample] ShowToast 成功: {res.errMsg}"); + }, + fail: (res) => + { + Debug.LogError($"[PCHPTestExample] ShowToast 失败: {res.errMsg}"); + }, + complete: (res) => + { + Debug.Log($"[PCHPTestExample] ShowToast 完成"); + } + ); + } + + /// + /// 测试 ShowModal - 在 Inspector 中调用或通过 UI 按钮调用 + /// + [ContextMenu("Test ShowModal")] + public void TestShowModal() + { + if (_pcManager == null || !_pcManager.IsSupported) + { + Debug.LogError("[PCHPTestExample] PC 高性能模式不可用"); + return; + } + + Debug.Log("[PCHPTestExample] 调用 ShowModal..."); + + _pcManager.ShowModal( + new PCHPShowModalOption + { + title = "提示", + content = "这是一个来自 Unity 的模态框测试", + showCancel = true, + cancelText = "取消", + confirmText = "确定" + }, + success: (res) => + { + if (res.confirm) + { + Debug.Log("[PCHPTestExample] 用户点击了确定"); + } + else if (res.cancel) + { + Debug.Log("[PCHPTestExample] 用户点击了取消"); + } + }, + fail: (res) => + { + Debug.LogError($"[PCHPTestExample] ShowModal 失败: {res.errMsg}"); + }, + complete: (res) => + { + Debug.Log($"[PCHPTestExample] ShowModal 完成"); + } + ); + } + + /// + /// 测试 ShowLoading - 在 Inspector 中调用或通过 UI 按钮调用 + /// + [ContextMenu("Test ShowLoading")] + public void TestShowLoading() + { + if (_pcManager == null || !_pcManager.IsSupported) + { + Debug.LogError("[PCHPTestExample] PC 高性能模式不可用"); + return; + } + + Debug.Log("[PCHPTestExample] 调用 ShowLoading..."); + + _pcManager.ShowLoading("加载中...", true, + success: (res) => + { + Debug.Log($"[PCHPTestExample] ShowLoading 成功"); + + // 2秒后隐藏 + StartCoroutine(HideLoadingAfterDelay(2f)); + }, + fail: (res) => + { + Debug.LogError($"[PCHPTestExample] ShowLoading 失败: {res.errMsg}"); + } + ); + } + + private System.Collections.IEnumerator HideLoadingAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + + _pcManager?.HideLoading( + success: (res) => + { + Debug.Log("[PCHPTestExample] HideLoading 成功"); + } + ); + } + + /// + /// 测试通用 API 调用 + /// + [ContextMenu("Test Generic API Call")] + public void TestGenericAPICall() + { + if (_pcManager == null || !_pcManager.IsSupported) + { + Debug.LogError("[PCHPTestExample] PC 高性能模式不可用"); + return; + } + + Debug.Log("[PCHPTestExample] 调用通用 API (getSystemInfoSync)..."); + + // 示例:调用任意 wx API + _pcManager.CallWXAPI( + "getSystemInfo", + new { }, // 无参数 + onSuccess: (res) => + { + Debug.Log($"[PCHPTestExample] getSystemInfo 成功: {res}"); + }, + onFail: (res) => + { + Debug.LogError($"[PCHPTestExample] getSystemInfo 失败: {res}"); + }, + onComplete: (res) => + { + Debug.Log("[PCHPTestExample] getSystemInfo 完成"); + } + ); + } + + /// + /// 测试事件监听 + /// + [ContextMenu("Test Event Listener")] + public void TestEventListener() + { + if (_pcManager == null || !_pcManager.IsSupported) + { + Debug.LogError("[PCHPTestExample] PC 高性能模式不可用"); + return; + } + + Debug.Log("[PCHPTestExample] 注册 onShow 事件监听..."); + + _pcManager.On("onShow", (data) => + { + Debug.Log($"[PCHPTestExample] 收到 onShow 事件: {data}"); + }); + + _pcManager.On("onHide", (data) => + { + Debug.Log($"[PCHPTestExample] 收到 onHide 事件: {data}"); + }); + } + + private void OnGUI() + { + // 简单的测试按钮 UI + GUILayout.BeginArea(new Rect(10, 10, 200, 300)); + GUILayout.Label("PC高性能小游戏测试"); + + if (GUILayout.Button("ShowToast")) + { + TestShowToast(); + } + + if (GUILayout.Button("ShowModal")) + { + TestShowModal(); + } + + if (GUILayout.Button("ShowLoading")) + { + TestShowLoading(); + } + + if (GUILayout.Button("GetSystemInfo")) + { + TestGenericAPICall(); + } + + if (GUILayout.Button("Register Events")) + { + TestEventListener(); + } + + GUILayout.EndArea(); + } + } +} diff --git a/Runtime/Examples/PCHPTestExample.cs.meta b/Runtime/Examples/PCHPTestExample.cs.meta new file mode 100644 index 000000000..c736d0c30 --- /dev/null +++ b/Runtime/Examples/PCHPTestExample.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0ded19877eaa0ed06ad5a1d789d245ee +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Runtime/Plugins/wx-perf.dll b/Runtime/Plugins/wx-perf.dll index 5320d0af31869643da3fd2279123fd543b6fd455..f635dc73a7e33fa6223e0def8635480188d63367 100644 GIT binary patch delta 38 wcmV+>0NMY5v;%;&1CWRV-qpOZi=o62CmJ^6L~bKRkf|@87{pu#vpmJb6jS;T?f?J) delta 38 wcmV+>0NMY5v;%;&1CWRV5^}e(i=o62zgX;}K>m70wYYs`I|HcNvpmJb6knnev;Y7A diff --git a/Runtime/Plugins/wx-runtime-editor.dll b/Runtime/Plugins/wx-runtime-editor.dll index 2c9f8ea647b4877f8cb65309d7c49c753b076445..677c352432a70a196fe9d322d788f3eadeb794c8 100644 GIT binary patch delta 262 zcmZp8A<*zbU_uA;?W=nlySH{TF5k?Uw%vFO<9!xJkL|)c8A~}CZMJtFVyu^76yMHy zn=w+KF?M<~7gHpV+6$((i*qyeGVvxco(&ad$YOlJB+QVreIqZ^??%SF?Q8p)7+n}s zwy(d;w8lln&DhAu$<@eQ*VWapd!#PKJiAt_Bvmj;@Xdx+ZQWF1i-x&d$1)7S2wl22Ms6rfyEt4_{?gv>--hEdv9? c-nAYV*;!Y4?pP7OHIC)qz3npBn4iP~0GYc{=>Px# delta 262 zcmZp8A<*zbU_uA8K+*Qb?ycR7%QrJRZa3b-c%Ow)dAsmV#!^m3@$H?580#e%y|;7T zW{lKlw3wdE#S{so_JXPH;@nKVOuV*?XG4V+;%eb&Y;0_3q3dR3>7;Ao+EE1;^b=PXzc82zJ0R< z^P4>?=BADo29^efx`wXCuDT|cM#j1pPA1N}7S0wXW-cy|>??NVn8@ G11wn@1r=Zb delta 48 zcmV-00MGw`qz{0k50Hoh3v#!Ci-n5;g^L2Uivu}$5YMtyhT@K2NW1d;I3#SbxVO}J G11wqlhZVm7 diff --git a/Runtime/Plugins/wx-runtime.xml.meta b/Runtime/Plugins/wx-runtime.xml.meta index 47bcc2740..378d8a3d4 100644 --- a/Runtime/Plugins/wx-runtime.xml.meta +++ b/Runtime/Plugins/wx-runtime.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 33778f932d74b9c0309d7573c86c9e5b +guid: 994ce11516cd5554aa45122f7122780b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/WXBase.cs b/Runtime/WXBase.cs index 7f7718edd..591aec7e8 100644 --- a/Runtime/WXBase.cs +++ b/Runtime/WXBase.cs @@ -1195,8 +1195,38 @@ namespace WeChatWASM public static WXRankManager GetRankManager() { return WXSDKManagerHandler.Instance.GetRankManager(); } - } -} #endregion +#region PC高性能小游戏 + /// + /// 获取 PC 高性能小游戏管理器 + /// 类似于 VA 方案的 wx.getAndroidHighPerformanceManager() + /// 用于在 PC 原生环境下与微信基础库通信 + /// + /// PC高性能管理器实例,如果不支持则返回 null + /// + /// var pcManager = WX.GetPCHighPerformanceManager(); + /// if (pcManager != null && pcManager.IsSupported) + /// { + /// pcManager.ShowToast(new PCHPShowToastOption + /// { + /// title = "Hello PC!", + /// icon = "success", + /// duration = 2000 + /// }); + /// } + /// + public static WXPCHighPerformanceManager GetPCHighPerformanceManager() + { +#if UNITY_STANDALONE_WIN + return WXPCHighPerformanceManager.GetInstance(); +#else + Debug.LogWarning("[WX] GetPCHighPerformanceManager 仅在 Windows 平台可用"); + return null; +#endif + } +#endregion + } +} + #endif diff --git a/Runtime/WXPCHPInitScript.cs b/Runtime/WXPCHPInitScript.cs new file mode 100644 index 000000000..97d569562 --- /dev/null +++ b/Runtime/WXPCHPInitScript.cs @@ -0,0 +1,959 @@ +using System; +using System.Collections.Generic; +using System.Collections.Concurrent; +using System.Runtime.InteropServices; +using UnityEngine; +using LitJson; + +namespace WeChatWASM +{ + #region Message Protocol Models + + /// + /// PC高性能方案通信协议 - 请求消息 + /// C# -> DLL -> 内核 -> 基础库 + /// + [Serializable] + public class PCHPRequestMessage + { + /// + /// 消息类型: "request" | "event_register" | "event_unregister" + /// + public string type; + + /// + /// 请求ID,用于匹配回调 + /// + public string requestId; + + /// + /// API名称,如 "showToast", "login" 等 + /// + public string api; + + /// + /// API参数,JSON格式 + /// + public string data; + + /// + /// 时间戳 + /// + public long timestamp; + } + + /// + /// PC高性能方案通信协议 - 响应消息 + /// 基础库 -> 内核 -> DLL -> C# + /// + [Serializable] + public class PCHPResponseMessage + { + /// + /// 消息类型: "response" | "event" + /// + public string type; + + /// + /// 请求ID,与请求消息匹配 + /// + public string requestId; + + /// + /// 回调类型: "success" | "fail" | "complete" + /// + public string callbackType; + + /// + /// API名称(事件类型时使用) + /// + public string api; + + /// + /// 响应数据,JSON格式 + /// + public string data; + + /// + /// 错误信息(失败时) + /// + public string errMsg; + + /// + /// 时间戳 + /// + public long timestamp; + } + + /// + /// 通用回调结果 + /// + [Serializable] + public class PCHPGeneralCallbackResult + { + public string errMsg; + } + + /// + /// ShowToast 参数 + /// + [Serializable] + public class PCHPShowToastOption + { + public string title; + public string icon; + public string image; + public int duration; + public bool mask; + } + + /// + /// ShowModal 参数 + /// + [Serializable] + public class PCHPShowModalOption + { + public string title; + public string content; + public bool showCancel; + public string cancelText; + public string cancelColor; + public string confirmText; + public string confirmColor; + public bool editable; + public string placeholderText; + } + + /// + /// ShowModal 成功回调结果 + /// + [Serializable] + public class PCHPShowModalSuccessCallbackResult + { + public bool confirm; + public bool cancel; + public string content; + public string errMsg; + } + + #endregion + + /// + /// PC高性能小游戏初始化脚本 + /// 负责与宿主程序的 direct_applet_sdk.dll 进行交互 + /// + 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 Callback Management + + /// + /// 回调信息封装 + /// + private class CallbackInfo + { + public Action OnSuccess; + public Action OnFail; + public Action OnComplete; + public string ApiName; + public long Timestamp; + } + + // 待处理的回调字典 + private readonly Dictionary _pendingCallbacks = new Dictionary(); + + // 事件监听器字典 >> + private readonly Dictionary>> _eventListeners = new Dictionary>>(); + + // 请求ID计数器 + private int _requestIdCounter = 0; + + // 线程安全的消息队列,用于主线程处理 + private readonly ConcurrentQueue _messageQueue = new ConcurrentQueue(); + + #endregion + + #region Events + + // 收到异步消息时触发的事件(原始字节) + public event Action 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 Update() + { + // 在主线程中处理消息队列 + ProcessMessageQueue(); + } + + private void OnDestroy() + { + if (instance == this) + { + CleanupSDK(); + instance = null; + } + } + + private void OnApplicationQuit() + { + CleanupSDK(); + } + + #endregion + + #region Public Methods - SDK Lifecycle + + /// + /// 初始化SDK并建立连接 + /// + 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"); + if (!InitEmbeddedGameSDK()) + { + ShowError("InitEmbeddedGameSDK 返回 false"); + return; + } + + // 2. 注册消息处理器 + Debug.Log("[WXPCHPInitScript] Step 2: 调用 RegisterAsyncMsgHandler"); + asyncMsgHandler = HandleAsyncMessage; + RegisterAsyncMsgHandler(asyncMsgHandler); + + // 3. 建立连接 + Debug.Log("[WXPCHPInitScript] Step 3: 调用 EstablishConnection"); + if (!EstablishConnection()) + { + ShowError("EstablishConnection 返回 false"); + IsConnected = false; + return; + } + IsConnected = true; + + // 4. 获取窗口句柄并初始化游戏窗口 + Debug.Log("[WXPCHPInitScript] Step 4: 获取窗口句柄"); + WindowHandle = GetActiveWindow(); + if (WindowHandle == IntPtr.Zero) + { + ShowError("GetActiveWindow 返回空句柄"); + return; + } + Debug.Log($"获取窗口句柄成功: 0x{WindowHandle.ToInt64():X}"); + + // 5. 通知内核获取窗口句柄 + Debug.Log("[WXPCHPInitScript] Step 5: 调用 InitGameWindow"); + if (!InitGameWindow((ulong)WindowHandle.ToInt64())) + { + ShowError("InitGameWindow 返回 false"); + return; + } + + IsInitialized = true; + 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}"); + } + } + + #endregion + + #region Public Methods - WX API Calls + + /// + /// 调用微信API(通用方法) + /// + /// API名称,如 "showToast" + /// API参数对象 + /// 成功回调 + /// 失败回调 + /// 完成回调 + /// 请求ID + public string CallWXAPI(string apiName, object data, Action onSuccess = null, Action onFail = null, Action onComplete = null) + { + if (!IsInitialized || !IsConnected) + { + Debug.LogWarning($"[WXPCHPInitScript] SDK未初始化或未连接,无法调用 {apiName}"); + onFail?.Invoke(JsonMapper.ToJson(new PCHPGeneralCallbackResult { errMsg = "SDK not initialized" })); + onComplete?.Invoke(JsonMapper.ToJson(new PCHPGeneralCallbackResult { errMsg = "SDK not initialized" })); + return null; + } + + string requestId = GenerateRequestId(); + string dataJson = data != null ? JsonMapper.ToJson(data) : "{}"; + + // 注册回调 + var callbackInfo = new CallbackInfo + { + OnSuccess = onSuccess, + OnFail = onFail, + OnComplete = onComplete, + ApiName = apiName, + Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + }; + _pendingCallbacks[requestId] = callbackInfo; + + // 构建请求消息 + var request = new PCHPRequestMessage + { + type = "request", + requestId = requestId, + api = apiName, + data = dataJson, + timestamp = callbackInfo.Timestamp + }; + + string requestJson = JsonMapper.ToJson(request); + Debug.Log($"[WXPCHPInitScript] 发送API请求: {apiName}, requestId: {requestId}"); + + if (!SendMessageInternal(requestJson)) + { + _pendingCallbacks.Remove(requestId); + onFail?.Invoke(JsonMapper.ToJson(new PCHPGeneralCallbackResult { errMsg = "Failed to send message" })); + onComplete?.Invoke(JsonMapper.ToJson(new PCHPGeneralCallbackResult { errMsg = "Failed to send message" })); + return null; + } + + return requestId; + } + + /// + /// 显示消息提示框 + /// + public void ShowToast(PCHPShowToastOption option, Action success = null, Action fail = null, Action complete = null) + { + CallWXAPI("showToast", option, + res => success?.Invoke(JsonMapper.ToObject(res)), + res => fail?.Invoke(JsonMapper.ToObject(res)), + res => complete?.Invoke(JsonMapper.ToObject(res)) + ); + } + + /// + /// 隐藏消息提示框 + /// + public void HideToast(Action success = null, Action fail = null, Action complete = null) + { + CallWXAPI("hideToast", null, + res => success?.Invoke(JsonMapper.ToObject(res)), + res => fail?.Invoke(JsonMapper.ToObject(res)), + res => complete?.Invoke(JsonMapper.ToObject(res)) + ); + } + + /// + /// 显示模态对话框 + /// + public void ShowModal(PCHPShowModalOption option, Action success = null, Action fail = null, Action complete = null) + { + CallWXAPI("showModal", option, + res => success?.Invoke(JsonMapper.ToObject(res)), + res => fail?.Invoke(JsonMapper.ToObject(res)), + res => complete?.Invoke(JsonMapper.ToObject(res)) + ); + } + + /// + /// 显示 loading 提示框 + /// + public void ShowLoading(string title, bool mask = false, Action success = null, Action fail = null, Action complete = null) + { + CallWXAPI("showLoading", new { title, mask }, + res => success?.Invoke(JsonMapper.ToObject(res)), + res => fail?.Invoke(JsonMapper.ToObject(res)), + res => complete?.Invoke(JsonMapper.ToObject(res)) + ); + } + + /// + /// 隐藏 loading 提示框 + /// + public void HideLoading(Action success = null, Action fail = null, Action complete = null) + { + CallWXAPI("hideLoading", null, + res => success?.Invoke(JsonMapper.ToObject(res)), + res => fail?.Invoke(JsonMapper.ToObject(res)), + res => complete?.Invoke(JsonMapper.ToObject(res)) + ); + } + + #endregion + + #region Public Methods - Event Listeners + + /// + /// 注册事件监听器 + /// + /// 事件名称,如 "onShow", "onHide" + /// 回调函数 + public void RegisterEventListener(string eventName, Action callback) + { + if (!_eventListeners.ContainsKey(eventName)) + { + _eventListeners[eventName] = new List>(); + + // 发送事件注册消息到基础库 + var request = new PCHPRequestMessage + { + type = "event_register", + requestId = GenerateRequestId(), + api = eventName, + data = "{}", + timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + }; + SendMessageInternal(JsonMapper.ToJson(request)); + } + + _eventListeners[eventName].Add(callback); + Debug.Log($"[WXPCHPInitScript] 注册事件监听: {eventName}"); + } + + /// + /// 移除事件监听器 + /// + /// 事件名称 + /// 要移除的回调函数,为null则移除所有 + public void UnregisterEventListener(string eventName, Action callback = null) + { + if (!_eventListeners.ContainsKey(eventName)) + { + return; + } + + if (callback == null) + { + _eventListeners.Remove(eventName); + } + else + { + _eventListeners[eventName].Remove(callback); + if (_eventListeners[eventName].Count == 0) + { + _eventListeners.Remove(eventName); + } + } + + // 如果没有监听器了,通知基础库取消注册 + if (!_eventListeners.ContainsKey(eventName)) + { + var request = new PCHPRequestMessage + { + type = "event_unregister", + requestId = GenerateRequestId(), + api = eventName, + data = "{}", + timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + }; + SendMessageInternal(JsonMapper.ToJson(request)); + } + + Debug.Log($"[WXPCHPInitScript] 移除事件监听: {eventName}"); + } + + #endregion + + #region Public Methods - Raw Message + + /// + /// 发送原始消息字符串 + /// + /// 消息内容 + /// 是否发送成功 + public bool SendRawMessage(string message) + { + return SendMessageInternal(message); + } + + /// + /// 发送原始消息字节数组 + /// + /// 消息数据 + /// 是否发送成功 + 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 + + /// + /// 生成唯一请求ID + /// + private string GenerateRequestId() + { + return $"pchp_{++_requestIdCounter}_{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}"; + } + + /// + /// 内部发送消息方法 + /// + private bool SendMessageInternal(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; + } + } + + /// + /// 显示信息弹窗(仅 Windows) + /// + 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 + } + + /// + /// 显示错误弹窗(仅 Windows) + /// + 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 + } + + /// + /// 清理SDK资源 + /// + private void CleanupSDK() + { + if (!IsInitialized) + { + return; + } + + try + { + // 清理待处理回调 + _pendingCallbacks.Clear(); + _eventListeners.Clear(); + + Cleanup(); + Debug.Log("[WXPCHPInitScript] SDK清理完成"); + } + catch (Exception e) + { + Debug.LogError($"[WXPCHPInitScript] 清理异常: {e.Message}"); + } + finally + { + IsInitialized = false; + IsConnected = false; + } + } + + /// + /// 在主线程中处理消息队列 + /// + private void ProcessMessageQueue() + { + while (_messageQueue.TryDequeue(out var response)) + { + try + { + ProcessResponse(response); + } + catch (Exception e) + { + Debug.LogError($"[WXPCHPInitScript] 处理响应消息异常: {e.Message}"); + } + } + } + + /// + /// 处理响应消息 + /// + private void ProcessResponse(PCHPResponseMessage response) + { + if (response.type == "response") + { + // 处理API回调 + if (_pendingCallbacks.TryGetValue(response.requestId, out var callbackInfo)) + { + Debug.Log($"[WXPCHPInitScript] 收到API响应: {callbackInfo.ApiName}, callbackType: {response.callbackType}"); + + switch (response.callbackType) + { + case "success": + callbackInfo.OnSuccess?.Invoke(response.data ?? "{}"); + break; + case "fail": + callbackInfo.OnFail?.Invoke(response.data ?? $"{{\"errMsg\":\"{response.errMsg}\"}}"); + break; + case "complete": + callbackInfo.OnComplete?.Invoke(response.data ?? "{}"); + // complete 后移除回调 + _pendingCallbacks.Remove(response.requestId); + break; + } + } + else + { + Debug.LogWarning($"[WXPCHPInitScript] 未找到对应的回调: requestId={response.requestId}"); + } + } + else if (response.type == "event") + { + // 处理事件通知 + string eventName = response.api; + if (_eventListeners.TryGetValue(eventName, out var listeners)) + { + Debug.Log($"[WXPCHPInitScript] 收到事件: {eventName}"); + foreach (var listener in listeners.ToArray()) + { + try + { + listener?.Invoke(response.data ?? "{}"); + } + catch (Exception e) + { + Debug.LogError($"[WXPCHPInitScript] 事件回调异常: {eventName}, {e.Message}"); + } + } + } + } + } + + /// + /// 异步消息处理回调(从DLL回调,可能在非主线程) + /// + [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) + { + // 触发原始消息事件 + instance.OnMessageReceived?.Invoke(buffer); + + // 解析消息 + string message = System.Text.Encoding.UTF8.GetString(buffer); + Debug.Log($"[WXPCHPInitScript] 收到原始消息: {message}"); + + try + { + // 尝试解析为响应消息 + var response = JsonMapper.ToObject(message); + if (response != null && !string.IsNullOrEmpty(response.type)) + { + // 加入消息队列,在主线程中处理 + instance._messageQueue.Enqueue(response); + } + } + catch (Exception parseEx) + { + Debug.LogWarning($"[WXPCHPInitScript] 消息解析失败,可能是非标准格式: {parseEx.Message}"); + } + } + } + catch (Exception e) + { + Debug.LogError($"[WXPCHPInitScript] 处理消息异常: {e.Message}"); + } + } + + #endregion + } + + /// + /// PC高性能小游戏管理器 + /// 提供类似 wx.getPCHighPerformanceManager() 的接口 + /// + public class WXPCHighPerformanceManager + { + private static WXPCHighPerformanceManager _instance; + private WXPCHPInitScript _initScript; + + /// + /// 获取 PC 高性能管理器实例 + /// + public static WXPCHighPerformanceManager GetInstance() + { + if (_instance == null) + { + _instance = new WXPCHighPerformanceManager(); + } + return _instance; + } + + private WXPCHighPerformanceManager() + { + _initScript = WXPCHPInitScript.Instance; + } + + /// + /// 是否支持PC高性能模式 + /// + public bool IsSupported => _initScript != null && _initScript.IsInitialized && _initScript.IsConnected; + + /// + /// 调用微信API + /// + public string CallWXAPI(string apiName, object data, Action onSuccess = null, Action onFail = null, Action onComplete = null) + { + if (_initScript == null) + { + Debug.LogError("[WXPCHighPerformanceManager] InitScript 未初始化"); + return null; + } + return _initScript.CallWXAPI(apiName, data, onSuccess, onFail, onComplete); + } + + /// + /// 显示 Toast + /// + public void ShowToast(PCHPShowToastOption option, Action success = null, Action fail = null, Action complete = null) + { + _initScript?.ShowToast(option, success, fail, complete); + } + + /// + /// 隐藏 Toast + /// + public void HideToast(Action success = null, Action fail = null, Action complete = null) + { + _initScript?.HideToast(success, fail, complete); + } + + /// + /// 显示模态对话框 + /// + public void ShowModal(PCHPShowModalOption option, Action success = null, Action fail = null, Action complete = null) + { + _initScript?.ShowModal(option, success, fail, complete); + } + + /// + /// 显示 Loading + /// + public void ShowLoading(string title, bool mask = false, Action success = null, Action fail = null, Action complete = null) + { + _initScript?.ShowLoading(title, mask, success, fail, complete); + } + + /// + /// 隐藏 Loading + /// + public void HideLoading(Action success = null, Action fail = null, Action complete = null) + { + _initScript?.HideLoading(success, fail, complete); + } + + /// + /// 注册事件监听 + /// + public void On(string eventName, Action callback) + { + _initScript?.RegisterEventListener(eventName, callback); + } + + /// + /// 移除事件监听 + /// + public void Off(string eventName, Action callback = null) + { + _initScript?.UnregisterEventListener(eventName, callback); + } + + /// + /// 发送原始消息 + /// + public bool SendRawMessage(string message) + { + return _initScript?.SendRawMessage(message) ?? false; + } + } +} diff --git a/Runtime/WXPCHPInitScript.cs.meta b/Runtime/WXPCHPInitScript.cs.meta new file mode 100644 index 000000000..54959e04f --- /dev/null +++ b/Runtime/WXPCHPInitScript.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 65b48177033749bf973a8af5bfb6b257 +DefaultImporter: +externalObjects: {} +userData: +assetBundleName: +assetBundleVariant: \ No newline at end of file diff --git a/Runtime/playable-default/check-version.js.meta b/Runtime/playable-default/check-version.js.meta index 3ee1fbe67..189372edd 100644 --- a/Runtime/playable-default/check-version.js.meta +++ b/Runtime/playable-default/check-version.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d3d5d2167fc6b91f7fa3e08ea84c3cda + guid: 7f57d6cd1b35abfe22c6048db5e4c750 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/data-package.meta b/Runtime/playable-default/data-package.meta index fb95538b9..d70102776 100644 --- a/Runtime/playable-default/data-package.meta +++ b/Runtime/playable-default/data-package.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6c06693e00be3ab1fde2607590ab4e6d +guid: 08b9e1c669ba5882e295a6f1a6ae4415 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/data-package/game.js.meta b/Runtime/playable-default/data-package/game.js.meta index c68b1a91f..b9ce7d279 100644 --- a/Runtime/playable-default/data-package/game.js.meta +++ b/Runtime/playable-default/data-package/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: a02513af1cc852341848d1ee2622c3aa + guid: 259a69c6e5dbbc9b440ddb6fc776428e DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/events.js.meta b/Runtime/playable-default/events.js.meta index 0481ed41a..dc091f266 100644 --- a/Runtime/playable-default/events.js.meta +++ b/Runtime/playable-default/events.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: de11e750d070e1521430f1ea7d7e9b10 + guid: b5585f946d7c7e2ef60fcf46cd7cd346 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/game.js.meta b/Runtime/playable-default/game.js.meta index 4b92cef81..4980adbd5 100644 --- a/Runtime/playable-default/game.js.meta +++ b/Runtime/playable-default/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 75c495849e8b58894c4df4019c28990f + guid: d3b92679c9f243a84aa921d171e476de DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/game.json.meta b/Runtime/playable-default/game.json.meta index eb5ec6a81..dae4d0fff 100644 --- a/Runtime/playable-default/game.json.meta +++ b/Runtime/playable-default/game.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2676c806e8720f27b3c91d7b88934aea + guid: 966cdf5a3007a19f8dc8366b0cb35dce DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/playable-fix.js.meta b/Runtime/playable-default/playable-fix.js.meta index 53c145c8e..9ddc572b5 100644 --- a/Runtime/playable-default/playable-fix.js.meta +++ b/Runtime/playable-default/playable-fix.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: f98ab3c051a738848f5f25b3963ff875 + guid: 0b1276caa43ee2a332dfd0ae896ffff4 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/plugin-config.js.meta b/Runtime/playable-default/plugin-config.js.meta index 08bed247a..cffe7f6a2 100644 --- a/Runtime/playable-default/plugin-config.js.meta +++ b/Runtime/playable-default/plugin-config.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 14b4dacf147a2eb0b690def4fd2a25f8 + guid: 2072d0a24e09a20f15f2bba8de4454fc DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/plugins.meta b/Runtime/playable-default/plugins.meta index b3393336c..ded2bc0f9 100644 --- a/Runtime/playable-default/plugins.meta +++ b/Runtime/playable-default/plugins.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fdc5a07bfe255668c4bc90b063ab0439 +guid: 6090e77f0d5c08b7a7c4b7cd6de31359 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/plugins/check-update.js.meta b/Runtime/playable-default/plugins/check-update.js.meta index 2b7584192..e9467ebdd 100644 --- a/Runtime/playable-default/plugins/check-update.js.meta +++ b/Runtime/playable-default/plugins/check-update.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: cc12ac5f1dcfb4041e5b88bdb3d39df1 + guid: 2e372447e97bc65f1a32ed2aa9096879 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/plugins/screen-adapter.js.meta b/Runtime/playable-default/plugins/screen-adapter.js.meta index 30d3586d0..4dfc7bde5 100644 --- a/Runtime/playable-default/plugins/screen-adapter.js.meta +++ b/Runtime/playable-default/plugins/screen-adapter.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 3a78826b373fd69d30b14736655164fc + guid: 8593576b3bea5e9099f219af1aba7045 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/project.config.json.meta b/Runtime/playable-default/project.config.json.meta index c0d720d1c..1ec20bd46 100644 --- a/Runtime/playable-default/project.config.json.meta +++ b/Runtime/playable-default/project.config.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 7e3a00c4051da2b6217cd8e156b32adc + guid: 42e7bf29b08571b888205c6e4339c119 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/texture-config.js.meta b/Runtime/playable-default/texture-config.js.meta index 2bbf5fa16..541a14f87 100644 --- a/Runtime/playable-default/texture-config.js.meta +++ b/Runtime/playable-default/texture-config.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: fa4490b63d04c3666e7d5bd6dbbe4a58 + guid: 8bb290f809c4b391b4798a098c9f09a5 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-namespace.js.meta b/Runtime/playable-default/unity-namespace.js.meta index 2945472bd..8bc254419 100644 --- a/Runtime/playable-default/unity-namespace.js.meta +++ b/Runtime/playable-default/unity-namespace.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 942f7b8a85c48dce854289ad244f3ca4 + guid: 939e681ff3cb94583bdf210bda2bc1db DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-playable-plugin.meta b/Runtime/playable-default/unity-playable-plugin.meta index d18d1f76d..e0a133ad0 100644 --- a/Runtime/playable-default/unity-playable-plugin.meta +++ b/Runtime/playable-default/unity-playable-plugin.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4dadbfddf470bde3a646527500a79bb6 +guid: 178079509bee7c70dfdd0145e92b4caa folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-playable-plugin/index.js.meta b/Runtime/playable-default/unity-playable-plugin/index.js.meta index 37f7d5cd5..60d894e4a 100644 --- a/Runtime/playable-default/unity-playable-plugin/index.js.meta +++ b/Runtime/playable-default/unity-playable-plugin/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 1516197a3756cc06853320f648bd30f2 + guid: 4e6748155c727383749076b67d718186 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk.meta b/Runtime/playable-default/unity-sdk.meta index e69020b1b..c01ac8482 100644 --- a/Runtime/playable-default/unity-sdk.meta +++ b/Runtime/playable-default/unity-sdk.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b193152a2bbc37d0feda3c6544e7afc8 +guid: 7f2d2631d7ecdfb5eb94a7a131c40e8f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-sdk/audio.meta b/Runtime/playable-default/unity-sdk/audio.meta index f4c7747ef..e73d86dee 100644 --- a/Runtime/playable-default/unity-sdk/audio.meta +++ b/Runtime/playable-default/unity-sdk/audio.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b5a694336b7dd91fd242250f890f19b5 +guid: 8c77c952bbc7ebc18828ee865aa249dc folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-sdk/audio/common.js.meta b/Runtime/playable-default/unity-sdk/audio/common.js.meta index d7c4d78d0..9e3c7d636 100644 --- a/Runtime/playable-default/unity-sdk/audio/common.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/common.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 5f862d1c69deabf4048bebed751c846d + guid: fd6f55d981c96b6ce4b439fc5d7ba05b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/const.js.meta b/Runtime/playable-default/unity-sdk/audio/const.js.meta index 1b2ee6429..86858a5de 100644 --- a/Runtime/playable-default/unity-sdk/audio/const.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/const.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 7eb49c157fec3510cca59918268546d6 + guid: 0f3d4e8c5a15d4c377bee5ff63357fe3 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/index.js.meta b/Runtime/playable-default/unity-sdk/audio/index.js.meta index 4d2f50fe9..4861adfcb 100644 --- a/Runtime/playable-default/unity-sdk/audio/index.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: f6eb3ae66cc21f0114a7c9e15ac57d76 + guid: 849867ad8f5943cbe716fc6487d51c60 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/inner-audio.js.meta b/Runtime/playable-default/unity-sdk/audio/inner-audio.js.meta index 8e85a55bd..d0d9cbd85 100644 --- a/Runtime/playable-default/unity-sdk/audio/inner-audio.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/inner-audio.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 1151cf42fe9e3fe2b444ddddbde08396 + guid: 49ecd8fb7582380fc68022158d1fe99e DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/store.js.meta b/Runtime/playable-default/unity-sdk/audio/store.js.meta index 00ac079e0..b4486345e 100644 --- a/Runtime/playable-default/unity-sdk/audio/store.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/store.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2b6db07c37dc2366237d59d8f785fd48 + guid: b3157f42901198aa13c4bf5acd01dda6 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/unity-audio.js.meta b/Runtime/playable-default/unity-sdk/audio/unity-audio.js.meta index 9600bc8c0..71f6fd1d2 100644 --- a/Runtime/playable-default/unity-sdk/audio/unity-audio.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/unity-audio.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 0e2b29c063f2d000be5dd2313958fa6c + guid: f43abc91150f8a71d17fc6925f7471b8 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/audio/utils.js.meta b/Runtime/playable-default/unity-sdk/audio/utils.js.meta index d1144c63b..2c56a9803 100644 --- a/Runtime/playable-default/unity-sdk/audio/utils.js.meta +++ b/Runtime/playable-default/unity-sdk/audio/utils.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d34cf0ce316d07409a850c605540a013 + guid: 3d169ab354e7e986788f3026351b3df2 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/canvas-context.js.meta b/Runtime/playable-default/unity-sdk/canvas-context.js.meta index ef3bf7b3a..0f15be465 100644 --- a/Runtime/playable-default/unity-sdk/canvas-context.js.meta +++ b/Runtime/playable-default/unity-sdk/canvas-context.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d91ef4c43c9f3c9a6da9a65b379b5740 + guid: dc70639c8fb81a21c2d0ed48a2e09055 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/canvas.js.meta b/Runtime/playable-default/unity-sdk/canvas.js.meta index fb3860152..9151ccd7b 100644 --- a/Runtime/playable-default/unity-sdk/canvas.js.meta +++ b/Runtime/playable-default/unity-sdk/canvas.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 6660a6a8aacee1f2096340441fdbd3ce + guid: 74d2190174fe3d8e51bacd693d76fb56 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/conf.js.meta b/Runtime/playable-default/unity-sdk/conf.js.meta index 6bab336a1..7198037f4 100644 --- a/Runtime/playable-default/unity-sdk/conf.js.meta +++ b/Runtime/playable-default/unity-sdk/conf.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 119c8bb6b0ad127ed8bac3162a9969f8 + guid: 7a1b414e72a5b3d10878d41812afbe50 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/file-info.js.meta b/Runtime/playable-default/unity-sdk/file-info.js.meta index 15fe9bdb1..09c16d9a2 100644 --- a/Runtime/playable-default/unity-sdk/file-info.js.meta +++ b/Runtime/playable-default/unity-sdk/file-info.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 59d869d78f133094896b88faa762234a + guid: 4662262bbdf6d323b39a2a86a61126e5 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/fix.js.meta b/Runtime/playable-default/unity-sdk/fix.js.meta index 24628b842..7ced82f45 100644 --- a/Runtime/playable-default/unity-sdk/fix.js.meta +++ b/Runtime/playable-default/unity-sdk/fix.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 34d39008817c30ca826af31fc01525e7 + guid: 3d553aece773486cff75ba43d8334656 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/fs.js.meta b/Runtime/playable-default/unity-sdk/fs.js.meta index 2ea010643..d8d1ea83e 100644 --- a/Runtime/playable-default/unity-sdk/fs.js.meta +++ b/Runtime/playable-default/unity-sdk/fs.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 73a18f6a646fbaf0e8526fc1526ae97a + guid: 67198a8ebdb82cf8ebfb2d20b61aa4d8 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/index.js.meta b/Runtime/playable-default/unity-sdk/index.js.meta index ab924e481..3bc02ebbe 100644 --- a/Runtime/playable-default/unity-sdk/index.js.meta +++ b/Runtime/playable-default/unity-sdk/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c9e4678df01d9876b1b0aa336ee45401 + guid: 9a41f63999f1832fa76e40009dd019f4 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/logger.js.meta b/Runtime/playable-default/unity-sdk/logger.js.meta index 42775c959..c82ce7d61 100644 --- a/Runtime/playable-default/unity-sdk/logger.js.meta +++ b/Runtime/playable-default/unity-sdk/logger.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c2c849f6ee1aeeb7f9ccc36695a38d24 + guid: cf98cf50bd04784eba086161eb7beff0 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/mobileKeyboard.meta b/Runtime/playable-default/unity-sdk/mobileKeyboard.meta index af2d906db..98b66809c 100644 --- a/Runtime/playable-default/unity-sdk/mobileKeyboard.meta +++ b/Runtime/playable-default/unity-sdk/mobileKeyboard.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b2200a16cb9b949081f51aa4fe6807bd +guid: 10892aa3c4c335b349085a1f7dac65c9 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-sdk/mobileKeyboard/index.js.meta b/Runtime/playable-default/unity-sdk/mobileKeyboard/index.js.meta index 8f0603112..81c6a262a 100644 --- a/Runtime/playable-default/unity-sdk/mobileKeyboard/index.js.meta +++ b/Runtime/playable-default/unity-sdk/mobileKeyboard/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: b89e0228f0375beca9b6d7b1ad95356a + guid: 1829bd393c4fe8cdbb8757cd2bb57059 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/module-helper.js.meta b/Runtime/playable-default/unity-sdk/module-helper.js.meta index 922378151..41f472378 100644 --- a/Runtime/playable-default/unity-sdk/module-helper.js.meta +++ b/Runtime/playable-default/unity-sdk/module-helper.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c82e223e59fd93811d3aa303bb51f02e + guid: 55cdae4754795c9052edc34fe6d91190 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/recorder.js.meta b/Runtime/playable-default/unity-sdk/recorder.js.meta index 0dc3e8b8d..16431534b 100644 --- a/Runtime/playable-default/unity-sdk/recorder.js.meta +++ b/Runtime/playable-default/unity-sdk/recorder.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 3c570e4eb7ff538d7aa640fb8c3d02da + guid: fd32e70e37f22fb9ce4ba5cd7faa8687 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/resType.js.meta b/Runtime/playable-default/unity-sdk/resType.js.meta index e4d29d04d..54ae80af0 100644 --- a/Runtime/playable-default/unity-sdk/resType.js.meta +++ b/Runtime/playable-default/unity-sdk/resType.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 9a8702f6acee306755d112480d39813c + guid: 16da51f16ded5794ee64beedbd9f940f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/resTypeOther.js.meta b/Runtime/playable-default/unity-sdk/resTypeOther.js.meta index 5b99b9ca8..1320617ca 100644 --- a/Runtime/playable-default/unity-sdk/resTypeOther.js.meta +++ b/Runtime/playable-default/unity-sdk/resTypeOther.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 90a536e2c5a0814cc1c58b70c92da9a4 + guid: b78a06476059ff8f01def83ddd0b60d7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/response.js.meta b/Runtime/playable-default/unity-sdk/response.js.meta index da697a76c..4f234ad02 100644 --- a/Runtime/playable-default/unity-sdk/response.js.meta +++ b/Runtime/playable-default/unity-sdk/response.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 02830b8246e010bdd89e47fefd9adf6b + guid: 0155e9018e364c9ca1f3364fd98705a4 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/sdk.js.meta b/Runtime/playable-default/unity-sdk/sdk.js.meta index 9dedb472b..b0d96fcb8 100644 --- a/Runtime/playable-default/unity-sdk/sdk.js.meta +++ b/Runtime/playable-default/unity-sdk/sdk.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 853f4640fa1b8a092c4ccb4669d6971c + guid: bcb1011479b8d3dbe90e8e9c79bbc74c DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/special-callbacks.js.meta b/Runtime/playable-default/unity-sdk/special-callbacks.js.meta index c177f04e9..d658f43ba 100644 --- a/Runtime/playable-default/unity-sdk/special-callbacks.js.meta +++ b/Runtime/playable-default/unity-sdk/special-callbacks.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 24c205c5759ec41da1b00eda2ac42564 + guid: bc7f7731b908719c93a2f6dac0163902 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/texture.js.meta b/Runtime/playable-default/unity-sdk/texture.js.meta index 9cf4f8537..c89b62b7f 100644 --- a/Runtime/playable-default/unity-sdk/texture.js.meta +++ b/Runtime/playable-default/unity-sdk/texture.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 9782628a70978396e495b86274aa398d + guid: 2c553951c20e40f44e666964e18bad90 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/touch.meta b/Runtime/playable-default/unity-sdk/touch.meta index b3ce6d8cc..e09c57ad8 100644 --- a/Runtime/playable-default/unity-sdk/touch.meta +++ b/Runtime/playable-default/unity-sdk/touch.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 674bba89e7bc0b330d4920c8a1d2470f +guid: 7ca747af394df40eb824da135548c0e5 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-sdk/touch/index.js.meta b/Runtime/playable-default/unity-sdk/touch/index.js.meta index 71cc2b1bc..220986057 100644 --- a/Runtime/playable-default/unity-sdk/touch/index.js.meta +++ b/Runtime/playable-default/unity-sdk/touch/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: faa496c26f840b60f61ac89b5f564f32 + guid: c61d9cfc0799ffab82694da4f3ad7c21 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/util.js.meta b/Runtime/playable-default/unity-sdk/util.js.meta index 0d550a94b..8accd9699 100644 --- a/Runtime/playable-default/unity-sdk/util.js.meta +++ b/Runtime/playable-default/unity-sdk/util.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 6cbac21da9894d5092f47042e7dcab8e + guid: decb35221ac62b4c7ee83f0cf628275b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/utils.js.meta b/Runtime/playable-default/unity-sdk/utils.js.meta index 19d7152b9..a0ad1edde 100644 --- a/Runtime/playable-default/unity-sdk/utils.js.meta +++ b/Runtime/playable-default/unity-sdk/utils.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: aa534e5bd9009a4f986abd6cc2ff823b + guid: e27c61edc719c746e4653816eb3ddee2 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/video.js.meta b/Runtime/playable-default/unity-sdk/video.js.meta index 3f6123120..a73109bfa 100644 --- a/Runtime/playable-default/unity-sdk/video.js.meta +++ b/Runtime/playable-default/unity-sdk/video.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 3251c8f50cca5fae20e0e2bbc567bf40 + guid: 2ca3f080c3a16b5d0bbc46f61f8a946f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/unity-sdk/video.meta b/Runtime/playable-default/unity-sdk/video.meta index f65da60aa..527bb653a 100644 --- a/Runtime/playable-default/unity-sdk/video.meta +++ b/Runtime/playable-default/unity-sdk/video.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ee130afc0339063c59da8a830c7663e +guid: 3228117466d03ec562271e8aaa496c3c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/unity-sdk/video/index.js.meta b/Runtime/playable-default/unity-sdk/video/index.js.meta index 63baed34d..a98aa7cc4 100644 --- a/Runtime/playable-default/unity-sdk/video/index.js.meta +++ b/Runtime/playable-default/unity-sdk/video/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 30161526e5960c70e6965463a8c98492 + guid: bc62dabb68972dcfda446b06729ab9fd DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/wasmcode.meta b/Runtime/playable-default/wasmcode.meta index ba0aa256d..a0d408473 100644 --- a/Runtime/playable-default/wasmcode.meta +++ b/Runtime/playable-default/wasmcode.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 47d2bb9aac0b87cfdf12358dc192e755 +guid: 2e267033c11fcab12c3068036fae4ad4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/playable-default/wasmcode/game.js.meta b/Runtime/playable-default/wasmcode/game.js.meta index 11e065318..fde3a7c1c 100644 --- a/Runtime/playable-default/wasmcode/game.js.meta +++ b/Runtime/playable-default/wasmcode/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 7babfccd3322d8f0bb49bb466cc03624 + guid: d012c0213ff9a137453b88177f9e24d0 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/playable-default/weapp-adapter.js.meta b/Runtime/playable-default/weapp-adapter.js.meta index 04b3af04a..bba78d322 100644 --- a/Runtime/playable-default/weapp-adapter.js.meta +++ b/Runtime/playable-default/weapp-adapter.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: a99dd0e69496ec987fc46d387fee8587 + guid: 9d1c1be8b512734f299aaa67aa3715d1 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/check-version.js.meta b/Runtime/wechat-default/check-version.js.meta index 69124942e..be3e5ea6c 100644 --- a/Runtime/wechat-default/check-version.js.meta +++ b/Runtime/wechat-default/check-version.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: deb969752e56efd1f30292483076fe8d + guid: 06f759d8cca0ff207a18d9acc2f8d74f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/data-package.meta b/Runtime/wechat-default/data-package.meta index a2d178242..9f83141b2 100644 --- a/Runtime/wechat-default/data-package.meta +++ b/Runtime/wechat-default/data-package.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 873c3ff5c09c499cea533e76613b289c +guid: ca655aba9438229b9671f32248203c00 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/data-package/game.js.meta b/Runtime/wechat-default/data-package/game.js.meta index e3a33d18d..eedfc5739 100644 --- a/Runtime/wechat-default/data-package/game.js.meta +++ b/Runtime/wechat-default/data-package/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: b62dfcd3bba0143fe64bb393b6718200 + guid: 024736480b639546a0b8eddf5e653aa7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/events.js.meta b/Runtime/wechat-default/events.js.meta index e2aba010f..cc032ee78 100644 --- a/Runtime/wechat-default/events.js.meta +++ b/Runtime/wechat-default/events.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 0f5d268ad00ae324c34a888a2bc0f3b9 + guid: 7a496d2e5268129ee152dff10505ce62 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/game.js.meta b/Runtime/wechat-default/game.js.meta index 88a17a104..1a4078607 100644 --- a/Runtime/wechat-default/game.js.meta +++ b/Runtime/wechat-default/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c4b7634dc3628a25ae87b92a174f5056 + guid: da6b07f8ec70eef864f491c54f6e901a DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/game.json.meta b/Runtime/wechat-default/game.json.meta index 71ff9558f..5aedd7061 100644 --- a/Runtime/wechat-default/game.json.meta +++ b/Runtime/wechat-default/game.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: acc81d1c264bc0dadd4552d59e6b5cc0 + guid: 382b4b747aa2c7f96c3c3bd1f1f9696c DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/images.meta b/Runtime/wechat-default/images.meta index a759e39d2..10299ad20 100644 --- a/Runtime/wechat-default/images.meta +++ b/Runtime/wechat-default/images.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 304fa8442a722ea29aaf75c80ecf36d0 +guid: 74164deeddb66ea1e5b7734eb749f414 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/images/background.jpg.meta b/Runtime/wechat-default/images/background.jpg.meta index 84907c342..ea9fcd766 100644 --- a/Runtime/wechat-default/images/background.jpg.meta +++ b/Runtime/wechat-default/images/background.jpg.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 07577f5e35b0d9d10be3e7da2f636244 + guid: 53ab8716ab40ccc4f3c38d7570a8e8eb DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/images/unity_logo.png.meta b/Runtime/wechat-default/images/unity_logo.png.meta index 3bc5caad9..798899aa7 100644 --- a/Runtime/wechat-default/images/unity_logo.png.meta +++ b/Runtime/wechat-default/images/unity_logo.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 90f5231878ca8f4be00b3ce66b678dd1 + guid: d9b96f88bf4e289a3d59c09cac71cb92 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data.meta b/Runtime/wechat-default/open-data.meta index 407e58d88..eb9496840 100644 --- a/Runtime/wechat-default/open-data.meta +++ b/Runtime/wechat-default/open-data.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f54994eb4369a71edd1d509002ad2f14 +guid: b50edccafdef9ef3dcbb482ba29f7623 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/data.meta b/Runtime/wechat-default/open-data/data.meta index 8b4d35470..2017a3707 100644 --- a/Runtime/wechat-default/open-data/data.meta +++ b/Runtime/wechat-default/open-data/data.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 48fbcdad3f9d3b9f921019659939b17c +guid: df9df7e8fcf642256de025216b59d85c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/data/index.js.meta b/Runtime/wechat-default/open-data/data/index.js.meta index a38acefeb..00aff7ef6 100644 --- a/Runtime/wechat-default/open-data/data/index.js.meta +++ b/Runtime/wechat-default/open-data/data/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 116976e02bc785ec509b059f15a5826b + guid: 3bed5e47cdcb258fefbe25ccb0ab5291 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/data/utils.js.meta b/Runtime/wechat-default/open-data/data/utils.js.meta index 63fc5362d..93f649e96 100644 --- a/Runtime/wechat-default/open-data/data/utils.js.meta +++ b/Runtime/wechat-default/open-data/data/utils.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 39b854a719f26a74ceafd3208b3d1559 + guid: 9d6251c84897e9a7726a1be8eeaead22 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/index.js.meta b/Runtime/wechat-default/open-data/index.js.meta index f513e21c5..e8ccef7d0 100644 --- a/Runtime/wechat-default/open-data/index.js.meta +++ b/Runtime/wechat-default/open-data/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 71c319aa5539d8cc938c59c1f95015a2 + guid: ca008768b492494eebbbc390e37678c7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/loading.js.meta b/Runtime/wechat-default/open-data/loading.js.meta index 654458fb3..b68c7e8ce 100644 --- a/Runtime/wechat-default/open-data/loading.js.meta +++ b/Runtime/wechat-default/open-data/loading.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 4c4cd8fe6d78dca85ddf042297dbfa8e + guid: 54e0d6041ac4e5245ffa8b3b414c9e39 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render.meta b/Runtime/wechat-default/open-data/render.meta index f38c2a239..4128e0307 100644 --- a/Runtime/wechat-default/open-data/render.meta +++ b/Runtime/wechat-default/open-data/render.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bfe81ba23a1b4042745b051435b5580c +guid: 16e2499db19da57e97d31b2ac979a57b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/render/image.meta b/Runtime/wechat-default/open-data/render/image.meta index 0dfdf02e4..319bab8e5 100644 --- a/Runtime/wechat-default/open-data/render/image.meta +++ b/Runtime/wechat-default/open-data/render/image.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b2047abd88a0e4c828645361f0825461 +guid: ad69d8a6eb967b69ee48e9826fe4a118 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/render/image/avatar.png.meta b/Runtime/wechat-default/open-data/render/image/avatar.png.meta index 21836350e..45b5ba943 100644 --- a/Runtime/wechat-default/open-data/render/image/avatar.png.meta +++ b/Runtime/wechat-default/open-data/render/image/avatar.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 05954e3656c1b42399214f7a474e1dc3 + guid: da62a1f356e238ad08de0540869563c7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/button1.png.meta b/Runtime/wechat-default/open-data/render/image/button1.png.meta index ef8a18a7c..390eaa30e 100644 --- a/Runtime/wechat-default/open-data/render/image/button1.png.meta +++ b/Runtime/wechat-default/open-data/render/image/button1.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: a10c90dec186b4fb6907d4c144ee7ab5 + guid: 130dbe918f2b66372ea973700e2edaef DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/button2.png.meta b/Runtime/wechat-default/open-data/render/image/button2.png.meta index b91ed14fb..bfa3402f5 100644 --- a/Runtime/wechat-default/open-data/render/image/button2.png.meta +++ b/Runtime/wechat-default/open-data/render/image/button2.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 9aa5b725da3747ea7fdd3007c9fc1e9a + guid: 83c92fe40693fa133341ab26731a52f0 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/button3.png.meta b/Runtime/wechat-default/open-data/render/image/button3.png.meta index d338d6aee..f0e8a75b0 100644 --- a/Runtime/wechat-default/open-data/render/image/button3.png.meta +++ b/Runtime/wechat-default/open-data/render/image/button3.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 3af9f84d877d17c7ba3a46100af46468 + guid: 9563a419c702f3d12dee88d867e5617f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/loading.png.meta b/Runtime/wechat-default/open-data/render/image/loading.png.meta index 02b41f253..98a80d7d3 100644 --- a/Runtime/wechat-default/open-data/render/image/loading.png.meta +++ b/Runtime/wechat-default/open-data/render/image/loading.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 55b4fb765fdc8b3266dd1a0bbc43e676 + guid: 3277a868d4991e1d00f9b125fb2f4d4b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/nameBg.png.meta b/Runtime/wechat-default/open-data/render/image/nameBg.png.meta index cb120a372..3f21c9fd6 100644 --- a/Runtime/wechat-default/open-data/render/image/nameBg.png.meta +++ b/Runtime/wechat-default/open-data/render/image/nameBg.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 00afcfdfb3003edd8e2b656b605b3ffa + guid: efd38b9e3d01ba6fe6e790ee3cd4cb21 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/rankAvatar.png.meta b/Runtime/wechat-default/open-data/render/image/rankAvatar.png.meta index f4277baa1..822463a33 100644 --- a/Runtime/wechat-default/open-data/render/image/rankAvatar.png.meta +++ b/Runtime/wechat-default/open-data/render/image/rankAvatar.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 89cb03c9ed8a7e361bce00ef148ccbf2 + guid: 1e46996bd4409d6e59ff2149f8dd33ba DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/rankBg.png.meta b/Runtime/wechat-default/open-data/render/image/rankBg.png.meta index 38398ff45..c9dbefc90 100644 --- a/Runtime/wechat-default/open-data/render/image/rankBg.png.meta +++ b/Runtime/wechat-default/open-data/render/image/rankBg.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 59e31d5214092a6aac6c531551853ca0 + guid: a2fe2d53ff9b3feabf50768e99629c8b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/shareBg.png.meta b/Runtime/wechat-default/open-data/render/image/shareBg.png.meta index 45d0d4685..67e459e8d 100644 --- a/Runtime/wechat-default/open-data/render/image/shareBg.png.meta +++ b/Runtime/wechat-default/open-data/render/image/shareBg.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 4a5a798604b6be679069a20a57e11ae1 + guid: 340ac1d9e9dff8fb158b6bb42507f958 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/image/shareBg2.png.meta b/Runtime/wechat-default/open-data/render/image/shareBg2.png.meta index fd027e578..e1870c8c2 100644 --- a/Runtime/wechat-default/open-data/render/image/shareBg2.png.meta +++ b/Runtime/wechat-default/open-data/render/image/shareBg2.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 9a5673030b9bf70f70afdca6c803b04c + guid: 7e6dc6dbbe5049d7a9e79985ecc4e1a6 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/styles.meta b/Runtime/wechat-default/open-data/render/styles.meta index 80c139eb2..08ed811c7 100644 --- a/Runtime/wechat-default/open-data/render/styles.meta +++ b/Runtime/wechat-default/open-data/render/styles.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a58425242d56601ca5e7a8bf142541f6 +guid: 09fc6edbb9f76ff506b4c95a36cc659a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/render/styles/friendRank.js.meta b/Runtime/wechat-default/open-data/render/styles/friendRank.js.meta index 50c297394..62626f9ef 100644 --- a/Runtime/wechat-default/open-data/render/styles/friendRank.js.meta +++ b/Runtime/wechat-default/open-data/render/styles/friendRank.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 29cded948b6b950b5355ab9df10b67f1 + guid: f3ac42cba07157a3de122fa9ae071b7c DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/styles/tips.js.meta b/Runtime/wechat-default/open-data/render/styles/tips.js.meta index 5809ce348..28aa17296 100644 --- a/Runtime/wechat-default/open-data/render/styles/tips.js.meta +++ b/Runtime/wechat-default/open-data/render/styles/tips.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: f6bd670007bd1d4bc41da7f15fb61de3 + guid: 93ef6cd47e5b8004edfc7d9374ca4ed8 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/tpls.meta b/Runtime/wechat-default/open-data/render/tpls.meta index 733956fcb..87f8ad1ef 100644 --- a/Runtime/wechat-default/open-data/render/tpls.meta +++ b/Runtime/wechat-default/open-data/render/tpls.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5f46ee06f252207d0c6c78773d336387 +guid: 67ddfe7e64e582d02e8dd2eb642dea07 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/open-data/render/tpls/friendRank.js.meta b/Runtime/wechat-default/open-data/render/tpls/friendRank.js.meta index c870e9e55..3af5fbedb 100644 --- a/Runtime/wechat-default/open-data/render/tpls/friendRank.js.meta +++ b/Runtime/wechat-default/open-data/render/tpls/friendRank.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 6b99f11c83f8a7a71c350d75494fe556 + guid: b392bc6b3a757fbab6bbac76737474e2 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/open-data/render/tpls/tips.js.meta b/Runtime/wechat-default/open-data/render/tpls/tips.js.meta index 3510e5d57..6bda91427 100644 --- a/Runtime/wechat-default/open-data/render/tpls/tips.js.meta +++ b/Runtime/wechat-default/open-data/render/tpls/tips.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: ff57ccfe8dab7a471b52563b9972e2c3 + guid: 0da0f1c9102a4d792e39d70c77b22bd8 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/plugin-config.js.meta b/Runtime/wechat-default/plugin-config.js.meta index 3f17ab3a7..de4aad8bd 100644 --- a/Runtime/wechat-default/plugin-config.js.meta +++ b/Runtime/wechat-default/plugin-config.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: f9cf8a7a084a8619a252f84e1fb1f251 + guid: fa234bee990e689f04f0d440e298fd9a DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/plugins.meta b/Runtime/wechat-default/plugins.meta index fc981b2a9..6882a67b1 100644 --- a/Runtime/wechat-default/plugins.meta +++ b/Runtime/wechat-default/plugins.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6a74b91bbf9d4d98c4fff2ffab7a52c9 +guid: c2ac33a5cea5d90a489bdeee41f149b6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/plugins/check-update.js.meta b/Runtime/wechat-default/plugins/check-update.js.meta index df1bfdbcb..00ffb12cb 100644 --- a/Runtime/wechat-default/plugins/check-update.js.meta +++ b/Runtime/wechat-default/plugins/check-update.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 26d8803cf9ba80350590438dd73bc5ca + guid: 393cff27fd3fce7c53f31fb2902db757 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/plugins/screen-adapter.js.meta b/Runtime/wechat-default/plugins/screen-adapter.js.meta index 49d987b5e..96432df54 100644 --- a/Runtime/wechat-default/plugins/screen-adapter.js.meta +++ b/Runtime/wechat-default/plugins/screen-adapter.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 96a9103f7ec0a0d4fe95340265f74ecf + guid: 1bb49f9a1a2d09a59c2e15a70a86f700 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/project.config.json.meta b/Runtime/wechat-default/project.config.json.meta index e49b727e1..5ad3a3323 100644 --- a/Runtime/wechat-default/project.config.json.meta +++ b/Runtime/wechat-default/project.config.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: edb9d40efac2bdc4f79004a24386e758 + guid: dc6e8fa1310122a06e93be01eb255438 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/texture-config.js.meta b/Runtime/wechat-default/texture-config.js.meta index 287bac263..a98d64446 100644 --- a/Runtime/wechat-default/texture-config.js.meta +++ b/Runtime/wechat-default/texture-config.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: cee42bcbf2a6dc2f7ee386bdd7e6b7a6 + guid: 6b35baa0203056ba4ff50dd314b47982 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-namespace.js.meta b/Runtime/wechat-default/unity-namespace.js.meta index 2b1180e8d..9048d0858 100644 --- a/Runtime/wechat-default/unity-namespace.js.meta +++ b/Runtime/wechat-default/unity-namespace.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 21b27cff06bdcc6455c16b124f88c9ac + guid: 386bb3c340329140df3b44ece9745716 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk.meta b/Runtime/wechat-default/unity-sdk.meta index 15cc2d141..d7c2e1275 100644 --- a/Runtime/wechat-default/unity-sdk.meta +++ b/Runtime/wechat-default/unity-sdk.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f5411f494113c860af36d9dc677da755 +guid: 5a127a4c31142416cdfcfa34f99107e6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/TCPSocket.meta b/Runtime/wechat-default/unity-sdk/TCPSocket.meta index cfd10c115..a74d291b9 100644 --- a/Runtime/wechat-default/unity-sdk/TCPSocket.meta +++ b/Runtime/wechat-default/unity-sdk/TCPSocket.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 200c2363eb490ac8bd42de6a6152acb7 +guid: a90a51355b919afe8fae7c9d0c7f80b6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/TCPSocket/index.js.meta b/Runtime/wechat-default/unity-sdk/TCPSocket/index.js.meta index 92d547e00..17e41dc76 100644 --- a/Runtime/wechat-default/unity-sdk/TCPSocket/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/TCPSocket/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c62268f3cbc41cfa6a869aa488b7dcaa + guid: fdd488ae353fb44d58cb3a346cb4f548 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/UDPSocket.meta b/Runtime/wechat-default/unity-sdk/UDPSocket.meta index 56dd83b4c..e703809c1 100644 --- a/Runtime/wechat-default/unity-sdk/UDPSocket.meta +++ b/Runtime/wechat-default/unity-sdk/UDPSocket.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5d17de8310e96d5659e9eedc881d8caf +guid: 71112b33dc588379df1cceb60338246e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/UDPSocket/index.js.meta b/Runtime/wechat-default/unity-sdk/UDPSocket/index.js.meta index b7f7dde93..17acfeed2 100644 --- a/Runtime/wechat-default/unity-sdk/UDPSocket/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/UDPSocket/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 90de48298fb45b9074181f93ec2daade + guid: 91dc357fade8aa043db59886d72d3213 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/ad.js.meta b/Runtime/wechat-default/unity-sdk/ad.js.meta index 63cd9f370..e09f3c655 100644 --- a/Runtime/wechat-default/unity-sdk/ad.js.meta +++ b/Runtime/wechat-default/unity-sdk/ad.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d111d3fd9892730124f6eb52437251c3 + guid: 127db9c94d44d2f06057e4bf1114e95a DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio.meta b/Runtime/wechat-default/unity-sdk/audio.meta index cfb18e7e4..9f4f258c6 100644 --- a/Runtime/wechat-default/unity-sdk/audio.meta +++ b/Runtime/wechat-default/unity-sdk/audio.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3c3df3a78955de8c28dc7c459aded8ff +guid: 030f8eaf1b8d01e5d2d5405aabaedfac folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/audio/common.js.meta b/Runtime/wechat-default/unity-sdk/audio/common.js.meta index 3aef7145c..a718e2dee 100644 --- a/Runtime/wechat-default/unity-sdk/audio/common.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/common.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 525f9e24a2e7e928d6d04b11580c04be + guid: a905b1577e0f15bc8d7a00d4df8a59b6 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/const.js.meta b/Runtime/wechat-default/unity-sdk/audio/const.js.meta index cf990437b..6266ce467 100644 --- a/Runtime/wechat-default/unity-sdk/audio/const.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/const.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 8aca97c9d6119da269ba15f63acfede4 + guid: 3ccf3470a4689ce771f3d46ff9f364fd DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/index.js.meta b/Runtime/wechat-default/unity-sdk/audio/index.js.meta index 22038d6f9..7f8d38ce6 100644 --- a/Runtime/wechat-default/unity-sdk/audio/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 6402c7c79ecacc3240c1adf0319f7c89 + guid: 5791aba8d97399ff852c0093acc1f959 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/inner-audio.js.meta b/Runtime/wechat-default/unity-sdk/audio/inner-audio.js.meta index 8dd92d36f..861a603f8 100644 --- a/Runtime/wechat-default/unity-sdk/audio/inner-audio.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/inner-audio.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d500a2aa78215a88443bfe7115e1ccf2 + guid: 5a0de8ca249b013c21274c914bbf1d6b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/store.js.meta b/Runtime/wechat-default/unity-sdk/audio/store.js.meta index ff1c7a51e..80ec34813 100644 --- a/Runtime/wechat-default/unity-sdk/audio/store.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/store.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c406972ff66cdfdea6b3856ec52f6e19 + guid: cbebdb11f4f8cc8c015affc57600f955 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/unity-audio.js.meta b/Runtime/wechat-default/unity-sdk/audio/unity-audio.js.meta index d1198d25e..ed253159b 100644 --- a/Runtime/wechat-default/unity-sdk/audio/unity-audio.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/unity-audio.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 95da111cd0fd60e43b7cb02a7bc38fd1 + guid: 003ae552f7c33356ea25ad0c24ade9cc DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/audio/utils.js.meta b/Runtime/wechat-default/unity-sdk/audio/utils.js.meta index 599eb5742..e9a6491f3 100644 --- a/Runtime/wechat-default/unity-sdk/audio/utils.js.meta +++ b/Runtime/wechat-default/unity-sdk/audio/utils.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 52bb3fb3cd0456b94ed3bd611de4227d + guid: 822ca3196ba4b51dd524f4d5535e7599 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/authorize.js.meta b/Runtime/wechat-default/unity-sdk/authorize.js.meta index ecfee1b34..2e1a2cb74 100644 --- a/Runtime/wechat-default/unity-sdk/authorize.js.meta +++ b/Runtime/wechat-default/unity-sdk/authorize.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 4a3c2e5d9acbe7daffe66f981f2c8355 + guid: ca768a21c5d31c6f750eae1dca01cc84 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/bluetooth.meta b/Runtime/wechat-default/unity-sdk/bluetooth.meta index 2830c2a0d..d3b3b62ae 100644 --- a/Runtime/wechat-default/unity-sdk/bluetooth.meta +++ b/Runtime/wechat-default/unity-sdk/bluetooth.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e3ced4be60a007b23382c35a96c329c8 +guid: 0ee186440ac8234bb3ad46d21e733812 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/bluetooth/index.js.meta b/Runtime/wechat-default/unity-sdk/bluetooth/index.js.meta index 3bed9bf74..6642a8305 100644 --- a/Runtime/wechat-default/unity-sdk/bluetooth/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/bluetooth/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: ea18d2b47acdcd3fbd34ae8a4228936a + guid: 6d518501c0988f1c823082ccf951918e DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/camera.js.meta b/Runtime/wechat-default/unity-sdk/camera.js.meta index 3bcf4be7d..76f14b687 100644 --- a/Runtime/wechat-default/unity-sdk/camera.js.meta +++ b/Runtime/wechat-default/unity-sdk/camera.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2298b5ff5eef247e681f2a1b4a31ced8 + guid: 5f0eec87fd1e8bb70d93d99abb58157f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/canvas-context.js.meta b/Runtime/wechat-default/unity-sdk/canvas-context.js.meta index cdce1e1c5..aacfaadfb 100644 --- a/Runtime/wechat-default/unity-sdk/canvas-context.js.meta +++ b/Runtime/wechat-default/unity-sdk/canvas-context.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2d8f13a9dbeca7eab9e20fe95aaf7363 + guid: 4092f72298baf01627756120a263a674 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/canvas.js.meta b/Runtime/wechat-default/unity-sdk/canvas.js.meta index cd2b0a278..89f320cc6 100644 --- a/Runtime/wechat-default/unity-sdk/canvas.js.meta +++ b/Runtime/wechat-default/unity-sdk/canvas.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 413a48902a2c99154741472fd5f89d1a + guid: 0b943b890153362cece10c390bbc5652 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/chat.js.meta b/Runtime/wechat-default/unity-sdk/chat.js.meta index 30a4271f9..10bbd1e29 100644 --- a/Runtime/wechat-default/unity-sdk/chat.js.meta +++ b/Runtime/wechat-default/unity-sdk/chat.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: c86b3be554947b7ad72a89bb5a4920bd + guid: 0aedadc88ec2c20688a95e65b6a57e9a DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/cloud.js.meta b/Runtime/wechat-default/unity-sdk/cloud.js.meta index 801b1e2c4..3584aa5b0 100644 --- a/Runtime/wechat-default/unity-sdk/cloud.js.meta +++ b/Runtime/wechat-default/unity-sdk/cloud.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 81e2c4a262721de36fabc0e3e8636666 + guid: 92e6eee0ac4e4de5e8b1ae79f811236c DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/conf.js.meta b/Runtime/wechat-default/unity-sdk/conf.js.meta index aa5e9de9c..b74aeba44 100644 --- a/Runtime/wechat-default/unity-sdk/conf.js.meta +++ b/Runtime/wechat-default/unity-sdk/conf.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: a796bbbfc63077cf9c917378f42cc5ce + guid: 728daf3c53d75587ea128f3dde624024 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/file-info.js.meta b/Runtime/wechat-default/unity-sdk/file-info.js.meta index 588b02adf..861713321 100644 --- a/Runtime/wechat-default/unity-sdk/file-info.js.meta +++ b/Runtime/wechat-default/unity-sdk/file-info.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 9fed21f35a9be181a00d4e1f48df49d4 + guid: 6bbb06835e5efd0b1438b56d91659745 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/fix.js.meta b/Runtime/wechat-default/unity-sdk/fix.js.meta index f783ca130..8af260d77 100644 --- a/Runtime/wechat-default/unity-sdk/fix.js.meta +++ b/Runtime/wechat-default/unity-sdk/fix.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 55859b2ca9b107764ea697eae3e6f33a + guid: 4979c6f4a7a9ed9258c27f3010cbac50 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/font.meta b/Runtime/wechat-default/unity-sdk/font.meta index 6c3f7076e..6188a0831 100644 --- a/Runtime/wechat-default/unity-sdk/font.meta +++ b/Runtime/wechat-default/unity-sdk/font.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b4ad72a189d905586c044d29c3cf484 +guid: a797283c052f5c50795c5d492908b63f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/font/fix-cmap.js.meta b/Runtime/wechat-default/unity-sdk/font/fix-cmap.js.meta index 9b36cdfcd..376d73f03 100644 --- a/Runtime/wechat-default/unity-sdk/font/fix-cmap.js.meta +++ b/Runtime/wechat-default/unity-sdk/font/fix-cmap.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 0186d384afa80caf0e51eab25c5b010e + guid: 462b258fa7814209ba3610bdda4541d1 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/font/index.js.meta b/Runtime/wechat-default/unity-sdk/font/index.js.meta index ad332fdda..b9421155e 100644 --- a/Runtime/wechat-default/unity-sdk/font/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/font/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: e4dc7847e9f58fea1e593ff983f0f359 + guid: 00652ec0662c929b50a90c06bc2f29c1 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/font/read-metrics.js.meta b/Runtime/wechat-default/unity-sdk/font/read-metrics.js.meta index f6bba8af9..1e4e41985 100644 --- a/Runtime/wechat-default/unity-sdk/font/read-metrics.js.meta +++ b/Runtime/wechat-default/unity-sdk/font/read-metrics.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: dcdf306b70074dd327165ac845156d73 + guid: 84532b903b2f5f247351b7261ac3b529 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/font/split-sc.js.meta b/Runtime/wechat-default/unity-sdk/font/split-sc.js.meta index 3d81b22b6..ec408d666 100644 --- a/Runtime/wechat-default/unity-sdk/font/split-sc.js.meta +++ b/Runtime/wechat-default/unity-sdk/font/split-sc.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: efb28ec972ad9078ca87cddf5cf95037 + guid: 52e4ed754cc0c48f86141ac9f2aa858b DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/font/util.js.meta b/Runtime/wechat-default/unity-sdk/font/util.js.meta index 693261c4f..539c938bc 100644 --- a/Runtime/wechat-default/unity-sdk/font/util.js.meta +++ b/Runtime/wechat-default/unity-sdk/font/util.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 32b999d9c6c6a3e78a71abd75808cd40 + guid: 2fe5af999754448f48bea579747d74d8 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/fs.js.meta b/Runtime/wechat-default/unity-sdk/fs.js.meta index 15023f67b..1511ea87f 100644 --- a/Runtime/wechat-default/unity-sdk/fs.js.meta +++ b/Runtime/wechat-default/unity-sdk/fs.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2690f08b3b083bcc69bfd72d86d61e86 + guid: fe6cae33b367588254ece53b290af0ae DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/game-club.js.meta b/Runtime/wechat-default/unity-sdk/game-club.js.meta index 37b493441..8a76525e0 100644 --- a/Runtime/wechat-default/unity-sdk/game-club.js.meta +++ b/Runtime/wechat-default/unity-sdk/game-club.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 972995c9786a741030857bc9ecc6440f + guid: 5c45213ca225f94047426e9a30f255ab DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/game-recorder.js.meta b/Runtime/wechat-default/unity-sdk/game-recorder.js.meta index 0fac10b46..31aad498d 100644 --- a/Runtime/wechat-default/unity-sdk/game-recorder.js.meta +++ b/Runtime/wechat-default/unity-sdk/game-recorder.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 5764aa6b5049b3c0b2b1b13f0ee16e94 + guid: 2858c03ac499a581101081d3673ca0f7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/gyroscope.meta b/Runtime/wechat-default/unity-sdk/gyroscope.meta index 4b488dfe4..70a0e01eb 100644 --- a/Runtime/wechat-default/unity-sdk/gyroscope.meta +++ b/Runtime/wechat-default/unity-sdk/gyroscope.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7f257d8ce4cdba29c20b438fbbaafb2e +guid: 747335583131e38bcef76a2779892f61 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/gyroscope/index.js.meta b/Runtime/wechat-default/unity-sdk/gyroscope/index.js.meta index 4d3424a3b..06476869b 100644 --- a/Runtime/wechat-default/unity-sdk/gyroscope/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/gyroscope/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 38f16790c9580a28264b8bbb93f61056 + guid: 31ed3ddc6bef1e1467352af82092cb72 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/index.js.meta b/Runtime/wechat-default/unity-sdk/index.js.meta index 61b7e9557..290f8bf3d 100644 --- a/Runtime/wechat-default/unity-sdk/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: e3b3c6dd61d8c57b1734b263a8673ba8 + guid: 89fd5caf7443bc279de63caae983fd57 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/logger.js.meta b/Runtime/wechat-default/unity-sdk/logger.js.meta index 3ba21280e..d14015b8b 100644 --- a/Runtime/wechat-default/unity-sdk/logger.js.meta +++ b/Runtime/wechat-default/unity-sdk/logger.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 87f83da2d74a47c731c31dd520fee7e8 + guid: d722fc7730c06249171b4b81dd83c4a1 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/mobileKeyboard.meta b/Runtime/wechat-default/unity-sdk/mobileKeyboard.meta index 2a4e99f66..499a5a486 100644 --- a/Runtime/wechat-default/unity-sdk/mobileKeyboard.meta +++ b/Runtime/wechat-default/unity-sdk/mobileKeyboard.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 25b9ac066940849660126f4ab20e4182 +guid: 99b04d981402d87bc3aaa95d284e56cb folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/mobileKeyboard/index.js.meta b/Runtime/wechat-default/unity-sdk/mobileKeyboard/index.js.meta index b6c5e7d85..35ea1c405 100644 --- a/Runtime/wechat-default/unity-sdk/mobileKeyboard/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/mobileKeyboard/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 707eedbe7c6973ee2ccfdfb6dd0cec6a + guid: ecbb7d28dfe37ed23d1cce422705a158 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/module-helper.js.meta b/Runtime/wechat-default/unity-sdk/module-helper.js.meta index 770b6b39e..159ee9b83 100644 --- a/Runtime/wechat-default/unity-sdk/module-helper.js.meta +++ b/Runtime/wechat-default/unity-sdk/module-helper.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 6b1d85d81eae9b38e0dd3aa97254f227 + guid: bcdfe06c0e537f17e833491f2e942d4f DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/open-data.js.meta b/Runtime/wechat-default/unity-sdk/open-data.js.meta index 957ab336b..9935cf661 100644 --- a/Runtime/wechat-default/unity-sdk/open-data.js.meta +++ b/Runtime/wechat-default/unity-sdk/open-data.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: ba989a8c2ef29f95456c9f20c4978eae + guid: 064b9e0452846c6b22f1e035a6c4ae80 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/recorder.js.meta b/Runtime/wechat-default/unity-sdk/recorder.js.meta index 49a4a3cd4..4dfdc58ed 100644 --- a/Runtime/wechat-default/unity-sdk/recorder.js.meta +++ b/Runtime/wechat-default/unity-sdk/recorder.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 947f1c70452864cb3b61b43580dc14cf + guid: 35b6de082c33a54d5e1d048924ecc9d7 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/resType.js.meta b/Runtime/wechat-default/unity-sdk/resType.js.meta index 05277469b..bd928d9d1 100644 --- a/Runtime/wechat-default/unity-sdk/resType.js.meta +++ b/Runtime/wechat-default/unity-sdk/resType.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 7902ec18d20301ca3fa2dbfed7792a1c + guid: 5a6259b853dbdde33fb05c78bc0d8970 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/resTypeOther.js.meta b/Runtime/wechat-default/unity-sdk/resTypeOther.js.meta index 55c59475d..f4c36c830 100644 --- a/Runtime/wechat-default/unity-sdk/resTypeOther.js.meta +++ b/Runtime/wechat-default/unity-sdk/resTypeOther.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: dec3ce46096de8834db3ed98536e74e1 + guid: dbcda00bc2b999475974c4850831ac1c DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/response.js.meta b/Runtime/wechat-default/unity-sdk/response.js.meta index 36918d0f8..e9cf647ce 100644 --- a/Runtime/wechat-default/unity-sdk/response.js.meta +++ b/Runtime/wechat-default/unity-sdk/response.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 2c05ae6f9561735272fef3e3f6b4ecc9 + guid: 4303b5a49c64e3845710cb6ac794ad92 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/sdk.js.meta b/Runtime/wechat-default/unity-sdk/sdk.js.meta index 8a4e0cd28..23fe57855 100644 --- a/Runtime/wechat-default/unity-sdk/sdk.js.meta +++ b/Runtime/wechat-default/unity-sdk/sdk.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 301415e3de7d5406a649871fdfde772a + guid: 87d92b749b52aa2521341a62b708a271 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/share.js.meta b/Runtime/wechat-default/unity-sdk/share.js.meta index 89cf8bb33..ab39b989d 100644 --- a/Runtime/wechat-default/unity-sdk/share.js.meta +++ b/Runtime/wechat-default/unity-sdk/share.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: bb97bd028a4d0c712efa2ba280ab24e0 + guid: 05a0853047e3fd8a826d64c1b306e25d DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/storage.js.meta b/Runtime/wechat-default/unity-sdk/storage.js.meta index cd6f28a82..3080acc2d 100644 --- a/Runtime/wechat-default/unity-sdk/storage.js.meta +++ b/Runtime/wechat-default/unity-sdk/storage.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 97cd600b2fb9ef89d94ba7c0274cc490 + guid: 8a110c6a6a43531c3f319351af0f7480 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/texture.js.meta b/Runtime/wechat-default/unity-sdk/texture.js.meta index 15247a7ef..f661ca17c 100644 --- a/Runtime/wechat-default/unity-sdk/texture.js.meta +++ b/Runtime/wechat-default/unity-sdk/texture.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 8c12a26b5aaf29c9a496493181298ac1 + guid: 44637d493c5da898e525db9ac4cc738e DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/touch.meta b/Runtime/wechat-default/unity-sdk/touch.meta index 5e0f63569..148c66317 100644 --- a/Runtime/wechat-default/unity-sdk/touch.meta +++ b/Runtime/wechat-default/unity-sdk/touch.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a527e638944a2c7966cca8f883d97a3 +guid: 321c9d283f586b40600940f374eadaf4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/touch/index.js.meta b/Runtime/wechat-default/unity-sdk/touch/index.js.meta index 2a916cd9e..5b2a897b9 100644 --- a/Runtime/wechat-default/unity-sdk/touch/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/touch/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: d26931ee77b39d82ac4a590215d2d401 + guid: b3c2ac5d8db47d0dc4114ad461a7b551 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/upload-file.js.meta b/Runtime/wechat-default/unity-sdk/upload-file.js.meta index 77eed949a..497551544 100644 --- a/Runtime/wechat-default/unity-sdk/upload-file.js.meta +++ b/Runtime/wechat-default/unity-sdk/upload-file.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 41da85adab1a8375154b0d0cbddcad56 + guid: b3ba825fcc1a0d67bd6ed9294d5acc02 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/userinfo.js.meta b/Runtime/wechat-default/unity-sdk/userinfo.js.meta index 9b025c9ce..f49581c62 100644 --- a/Runtime/wechat-default/unity-sdk/userinfo.js.meta +++ b/Runtime/wechat-default/unity-sdk/userinfo.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 5290186188fb99f148a0909a6fec0e65 + guid: 10e23113419eb758e8cec8b25f7ada71 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/util.js.meta b/Runtime/wechat-default/unity-sdk/util.js.meta index d0b488b4a..f99e2edd1 100644 --- a/Runtime/wechat-default/unity-sdk/util.js.meta +++ b/Runtime/wechat-default/unity-sdk/util.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: bb38d68a06ebcf4f826db14afe5c86a6 + guid: 26badc0e272d68a2a4defe99525183a4 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/utils.js.meta b/Runtime/wechat-default/unity-sdk/utils.js.meta index 699f118d2..cf98adb09 100644 --- a/Runtime/wechat-default/unity-sdk/utils.js.meta +++ b/Runtime/wechat-default/unity-sdk/utils.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 86115cda650af5a491322811dd151afa + guid: ad3a01cd26fe20076deca9f8756f0ef3 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/video.js.meta b/Runtime/wechat-default/unity-sdk/video.js.meta index bae6f763a..62d8f96ce 100644 --- a/Runtime/wechat-default/unity-sdk/video.js.meta +++ b/Runtime/wechat-default/unity-sdk/video.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: ecdfb9c9c051a9e0327f05b356062db0 + guid: 02be77c455e05360005e202136dc0522 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/unity-sdk/video.meta b/Runtime/wechat-default/unity-sdk/video.meta index 9a0f158b8..6957d675a 100644 --- a/Runtime/wechat-default/unity-sdk/video.meta +++ b/Runtime/wechat-default/unity-sdk/video.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ef797d24859e9a0d7f684b1937e06e3f +guid: bf7a5f8e0b087e894015e07982cd40ee folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/unity-sdk/video/index.js.meta b/Runtime/wechat-default/unity-sdk/video/index.js.meta index 922fdd3fe..d6d007a1d 100644 --- a/Runtime/wechat-default/unity-sdk/video/index.js.meta +++ b/Runtime/wechat-default/unity-sdk/video/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 5d8f555bce860047602ef541b6c5063b + guid: 55b0bf30ebe775e8b6557e5950d003f6 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/wasmcode.meta b/Runtime/wechat-default/wasmcode.meta index 385051c8f..b45aa9d01 100644 --- a/Runtime/wechat-default/wasmcode.meta +++ b/Runtime/wechat-default/wasmcode.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 35a601e53c9e15487be956df49fbb317 +guid: b0d8b66e4ec8b7b56a74ea2c649c2629 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/wasmcode/game.js.meta b/Runtime/wechat-default/wasmcode/game.js.meta index 3e997cd8b..f68040f3b 100644 --- a/Runtime/wechat-default/wasmcode/game.js.meta +++ b/Runtime/wechat-default/wasmcode/game.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: 801f369a209b7c5cd65e0ab77059cdcf + guid: cf5fdc63d573cff43047229012d76634 DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/weapp-adapter.js.meta b/Runtime/wechat-default/weapp-adapter.js.meta index f5e4fc61e..960c919e1 100644 --- a/Runtime/wechat-default/weapp-adapter.js.meta +++ b/Runtime/wechat-default/weapp-adapter.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: a2c66f789f28151d12999baaa3bdaeb5 + guid: eccabf8b062dfa308e0409ccee698a4d DefaultImporter: externalObjects: {} userData: diff --git a/Runtime/wechat-default/workers.meta b/Runtime/wechat-default/workers.meta index afb4062c3..7fa92daea 100644 --- a/Runtime/wechat-default/workers.meta +++ b/Runtime/wechat-default/workers.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3e862c14cabeade40e53ac32d5011a75 +guid: a9d3fe7db81dd39cb327906a9dafda82 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/workers/response.meta b/Runtime/wechat-default/workers/response.meta index 239f34c0b..fd76a1e9f 100644 --- a/Runtime/wechat-default/workers/response.meta +++ b/Runtime/wechat-default/workers/response.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fd93c94282bbc01d424b2680fb68be66 +guid: e5ea1205c2def40534c54f4cb04c262e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/wechat-default/workers/response/index.js.meta b/Runtime/wechat-default/workers/response/index.js.meta index 24f55df69..620e61563 100644 --- a/Runtime/wechat-default/workers/response/index.js.meta +++ b/Runtime/wechat-default/workers/response/index.js.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 - guid: edcb4e85d6566bdaa4c8b83ba9ac2ad9 + guid: db084d9580e171993fa726c15c862980 DefaultImporter: externalObjects: {} userData: diff --git a/package.json b/package.json index 496db7a3d..650163cc4 100644 --- a/package.json +++ b/package.json @@ -1 +1,14 @@ -{"name":"com.qq.weixin.minigame","displayName":"WXSDK","description":"WeChat Mini Game Tuanjie Engine Adapter SDK Package.","version":"0.1.32","unity":"2019.4","unityRelease":"29f1","keywords":["Tuanjie","WX"],"dependencies":{}} +{ + "name": "com.qq.weixin.minigame", + "displayName": "WXSDK", + "description": "WeChat Mini Game Tuanjie Engine Adapter SDK Package.", + "version": "0.1.1", + "unity": "2019.4", + "unityRelease": "29f1", + "keywords": [ + "Tuanjie", + "WX" + ], + "dependencies": { + } +} \ No newline at end of file