Auto-publish.

This commit is contained in:
nebulaliu 2026-03-02 15:46:57 +08:00
parent 6dee791073
commit 495a037443
172 changed files with 804 additions and 162 deletions

View File

@ -0,0 +1,168 @@
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.SceneManagement;
using System.IO;
namespace WeChatWASM
{
/// <summary>
/// PC高性能小游戏构建预处理器
/// 负责在构建前向首场景注入 EmbeddedAppletSDK
/// </summary>
public class PCHPBuildPreProcessor : IPreprocessBuildWithReport
{
public int callbackOrder => 0;
public void OnPreprocessBuild(BuildReport report)
{
// 只处理 Windows/Mac Standalone 构建
var buildTarget = report.summary.platform;
if (buildTarget != BuildTarget.StandaloneWindows64 &&
buildTarget != BuildTarget.StandaloneOSX)
{
return;
}
Debug.Log("[PC高性能小游戏] 开始预处理构建...");
try
{
// 1. 确保用户项目中有 EmbeddedAppletSDK 脚本(可选)
EnsureSDKScriptExists();
// 2. 向首场景注入 SDK GameObject
InjectSDKToFirstScene();
Debug.Log("[PC高性能小游戏] 预处理完成!");
}
catch (System.Exception e)
{
Debug.LogError($"[PC高性能小游戏] 预处理失败: {e.Message}\n{e.StackTrace}");
}
}
/// <summary>
/// 确保用户项目中存在 EmbeddedAppletSDK.cs 脚本
/// 如果不存在,从模板复制
/// </summary>
private void EnsureSDKScriptExists()
{
// 检查用户项目中是否已有脚本
var sdkType = System.Type.GetType("EmbeddedAppletSDK");
if (sdkType != null)
{
Debug.Log("[PC高性能小游戏] 用户项目中已存在 EmbeddedAppletSDK 脚本");
return;
}
// 模板路径SDK 包内)
string templatePath = Path.Combine(
Application.dataPath,
"WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs"
);
if (!File.Exists(templatePath))
{
Debug.LogWarning($"[PC高性能小游戏] 找不到模板文件: {templatePath}");
Debug.LogWarning("[PC高性能小游戏] 将仅创建空 GameObject不添加组件");
return;
}
// 目标路径(用户项目 Scripts 目录)
string targetPath = Path.Combine(Application.dataPath, "Scripts/EmbeddedAppletSDK.cs");
// 确保目标目录存在
string targetDir = Path.GetDirectoryName(targetPath);
if (!Directory.Exists(targetDir))
{
Directory.CreateDirectory(targetDir);
}
// 复制文件
File.Copy(templatePath, targetPath, false); // 不覆盖已存在的文件
AssetDatabase.Refresh();
Debug.Log($"[PC高性能小游戏] 已复制 EmbeddedAppletSDK.cs 到: {targetPath}");
}
/// <summary>
/// 向第一个启用的场景注入 SDK GameObject
/// </summary>
private void InjectSDKToFirstScene()
{
// 1. 获取第一个启用的场景
var firstScenePath = GetFirstEnabledScene();
if (string.IsNullOrEmpty(firstScenePath))
{
Debug.LogWarning("[PC高性能小游戏] 没有找到启用的场景,跳过注入");
return;
}
// 2. 保存当前场景状态
var currentScenes = EditorSceneManager.GetSceneManagerSetup();
// 3. 打开目标场景
var scene = EditorSceneManager.OpenScene(firstScenePath, OpenSceneMode.Single);
// 4. 检查是否已存在 SDK 对象
var existingSDK = GameObject.Find("EmbeddedAppletSDK");
if (existingSDK != null)
{
Debug.Log($"[PC高性能小游戏] 场景 {scene.name} 中已存在 SDK 对象,跳过注入");
RestoreScenes(currentScenes);
return;
}
// 5. 创建空 GameObject 并添加 EmbeddedAppletSDK 组件
var sdkObject = new GameObject("EmbeddedAppletSDK");
// 尝试添加组件(如果用户项目中有该脚本)
var sdkType = System.Type.GetType("EmbeddedAppletSDK");
if (sdkType != null)
{
sdkObject.AddComponent(sdkType);
Debug.Log($"[PC高性能小游戏] 已在 {scene.name} 中创建 SDK 对象并添加组件");
}
else
{
Debug.LogWarning("[PC高性能小游戏] 找不到 EmbeddedAppletSDK 类型,仅创建空对象");
Debug.LogWarning("[PC高性能小游戏] 请确保项目中包含 EmbeddedAppletSDK.cs 脚本");
}
// 6. 保存场景
EditorSceneManager.MarkSceneDirty(scene);
EditorSceneManager.SaveScene(scene);
// 7. 恢复之前的场景布局
RestoreScenes(currentScenes);
}
/// <summary>
/// 获取第一个启用的场景路径
/// </summary>
private string GetFirstEnabledScene()
{
foreach (var scene in EditorBuildSettings.scenes)
{
if (scene.enabled)
{
return scene.path;
}
}
return null;
}
/// <summary>
/// 恢复之前打开的场景布局
/// </summary>
private void RestoreScenes(UnityEditor.SceneManagement.SceneSetup[] setup)
{
if (setup != null && setup.Length > 0)
{
EditorSceneManager.RestoreSceneManagerSetup(setup);
}
}
}
}

View File

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

View File

@ -0,0 +1,114 @@
# PC高性能小游戏 - 自动化构建注入
## 📂 文件结构
```
WX-WASM-SDK-V2/Editor/PCHighPerformance/
├── PCHPBuildPreProcessor.cs # 构建预处理器(自动注入)
├── WXPCSettingHelper.cs # 构建配置助手
├── WXEditorPCHPWindow.cs # 编辑器窗口
└── Templates/
└── EmbeddedAppletSDK.cs # SDK 运行时脚本模板
```
---
## 🎯 功能说明
### 自动注入机制
**触发时机**开发者点击「生成并转换」按钮Unity 开始构建 Windows/macOS 平台前
**工作流程**
```
构建开始
PCHPBuildPreProcessor.OnPreprocessBuild() 触发
Step 1: 检查用户项目是否有 EmbeddedAppletSDK.cs
├── 有 → 跳过
└── 没有 → 从 Templates/ 复制到 Assets/Scripts/
Step 2: 打开首个启用场景
Step 3: 检查场景是否已有 "EmbeddedAppletSDK" GameObject
├── 有 → 跳过注入
└── 没有 → 创建空 GameObject + 添加 EmbeddedAppletSDK 组件
Step 4: 保存场景并恢复原始布局
继续正常构建流程
```
---
## ✅ 关键特性
1. **零侵入**:不修改开发者当前打开的场景
2. **智能检测**:自动检测是否已存在脚本/对象,避免重复
3. **自动复制**:首次使用时自动将 SDK 脚本复制到用户项目
4. **可定制**:开发者可修改复制后的脚本实现自定义逻辑
---
## 🔧 配置说明
### 模板文件位置
```
Assets/WX-WASM-SDK-V2/Editor/PCHighPerformance/Templates/EmbeddedAppletSDK.cs
```
**作用**:首次构建时自动复制到用户项目的 `Assets/Scripts/` 目录
### 复制目标路径
```
用户项目/Assets/Scripts/EmbeddedAppletSDK.cs
```
**策略**`File.Copy(overwrite: false)` → 不会覆盖用户已修改的文件
---
## 🐛 常见问题
### Q: 为什么导出的工程没有 SDK 对象?
检查 Console 日志:
- ✅ `[PC高性能小游戏] 已在 XXX 中创建 SDK 对象并添加组件` → 成功
- ⚠️ `找不到 EmbeddedAppletSDK 类型` → 脚本未编译或命名空间错误
### Q: 如何自定义 SDK 逻辑?
1. 构建一次(自动复制模板到 `Assets/Scripts/EmbeddedAppletSDK.cs`
2. 修改该文件
3. 后续构建会使用你修改的版本
### Q: DLL 加载失败?
**原因**`direct_applet_sdk.dll` 必须在 **运行时** 的根目录(与 .exe 同级)
**解决**:确保宿主程序启动时提供 DLL
---
## 📝 技术细节
| 项 | 值 |
|---|---|
| 触发接口 | `IPreprocessBuildWithReport` |
| 回调优先级 | `callbackOrder = 0` |
| 支持平台 | Windows x64, macOS |
| 场景修改策略 | 临时打开 → 注入 → 保存 → 恢复 |
| 脚本复制策略 | 首次复制,不覆盖已有文件 |
---
## 🔄 更新日志
### v1.0.0 (2026-03-02)
- ✅ 实现自动注入 EmbeddedAppletSDK GameObject
- ✅ 智能检测并复制模板脚本
- ✅ 兼容 Windows 和 macOS 构建

View File

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

View File

@ -0,0 +1,339 @@
using System;
using System.Runtime.InteropServices;
using UnityEngine;
/// <summary>
/// 嵌入式小程序SDK封装类
/// 负责与宿主程序的 direct_applet_sdk.dll 进行交互
/// </summary>
public class EmbeddedAppletSDK : 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 EmbeddedAppletSDK instance;
public static EmbeddedAppletSDK Instance => instance;
#endregion
#region Events
// 收到异步消息时触发的事件
public event Action<byte[]> OnMessageReceived;
#endregion
#region Properties
// SDK是否已初始化
public bool IsInitialized { get; private set; }
// 是否已连接
public bool IsConnected { get; private set; }
// 窗口句柄
public IntPtr WindowHandle { get; private set; }
#endregion
#region Unity Lifecycle
private void Awake()
{
if (instance != null && instance != this)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
// 初始化SDK
Initialize();
}
private void OnDestroy()
{
if (instance == this)
{
CleanupSDK();
instance = null;
}
}
private void OnApplicationQuit()
{
CleanupSDK();
}
#endregion
#region Public Methods
/// <summary>
/// 初始化SDK并建立连接
/// </summary>
public void Initialize()
{
if (IsInitialized)
{
Debug.LogWarning("[EmbeddedAppletSDK] SDK已经初始化");
return;
}
try
{
// 1. 初始化SDK
ShowInfo("开始调用 InitEmbeddedGameSDK...");
if (!InitEmbeddedGameSDK())
{
ShowError("InitEmbeddedGameSDK 返回 false");
return;
}
ShowInfo("InitEmbeddedGameSDK 成功");
// 2. 注册消息处理器 (暂时屏蔽)
// asyncMsgHandler = HandleAsyncMessage;
// RegisterAsyncMsgHandler(asyncMsgHandler);
// ShowInfo("RegisterAsyncMsgHandler 成功");
ShowInfo("RegisterAsyncMsgHandler 已跳过");
// 3. 建立连接 (暂时屏蔽)
if (!EstablishConnection())
{
ShowError("EstablishConnection 返回 false");
IsConnected = true;
return;
}
// 4. 获取窗口句柄并初始化游戏窗口
WindowHandle = GetActiveWindow();
if (WindowHandle == IntPtr.Zero)
{
ShowError("GetActiveWindow 返回空句柄");
return;
}
ShowInfo($"获取窗口句柄成功: 0x{WindowHandle.ToInt64():X}");
if (!InitGameWindow((ulong)WindowHandle.ToInt64()))
{
ShowError("InitGameWindow 返回 false");
return;
}
ShowInfo("InitGameWindow 成功");
IsInitialized = true;
ShowInfo("SDK 完全初始化成功!");
}
catch (DllNotFoundException e)
{
ShowError($"找不到DLL: {e.Message}");
}
catch (EntryPointNotFoundException e)
{
ShowError($"找不到函数入口: {e.Message}");
}
catch (Exception e)
{
ShowError($"初始化异常: {e.Message}\n{e.StackTrace}");
}
}
/// <summary>
/// 显示信息弹窗
/// </summary>
private void ShowInfo(string message)
{
Debug.Log($"[EmbeddedAppletSDK] {message}");
// MB_OK | MB_ICONINFORMATION = 0x40
MessageBox(IntPtr.Zero, message, "EmbeddedAppletSDK Info", 0x40);
}
/// <summary>
/// 显示错误弹窗
/// </summary>
private void ShowError(string message)
{
Debug.LogError($"[EmbeddedAppletSDK] {message}");
// MB_OK | MB_ICONERROR = 0x10
MessageBox(IntPtr.Zero, message, "EmbeddedAppletSDK Error", 0x10);
}
/// <summary>
/// 发送异步消息到宿主
/// </summary>
/// <param name="message">消息内容</param>
/// <returns>是否发送成功</returns>
public bool SendMessage(string message)
{
if (!IsInitialized || !IsConnected)
{
Debug.LogWarning("[EmbeddedAppletSDK] SDK未初始化或未连接");
return false;
}
try
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
return SendMessage(data);
}
catch (Exception e)
{
Debug.LogError($"[EmbeddedAppletSDK] 发送消息异常: {e.Message}");
return false;
}
}
/// <summary>
/// 发送异步消息到宿主
/// </summary>
/// <param name="data">消息数据</param>
/// <returns>是否发送成功</returns>
public bool SendMessage(byte[] data)
{
if (!IsInitialized || !IsConnected)
{
Debug.LogWarning("[EmbeddedAppletSDK] SDK未初始化或未连接");
return false;
}
if (data == null || data.Length == 0)
{
Debug.LogWarning("[EmbeddedAppletSDK] 发送的数据为空");
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($"[EmbeddedAppletSDK] 发送消息异常: {e.Message}");
return false;
}
}
#endregion
#region Private Methods
/// <summary>
/// 清理SDK资源
/// </summary>
private void CleanupSDK()
{
if (!IsInitialized)
{
return;
}
try
{
Cleanup();
Debug.Log("[EmbeddedAppletSDK] SDK清理完成");
}
catch (Exception e)
{
Debug.LogError($"[EmbeddedAppletSDK] 清理异常: {e.Message}");
}
finally
{
IsInitialized = false;
IsConnected = false;
}
}
/// <summary>
/// 异步消息处理回调
/// </summary>
[AOT.MonoPInvokeCallback(typeof(AsyncMsgHandlerDelegate))]
private static void HandleAsyncMessage(IntPtr data, int len)
{
if (data == IntPtr.Zero || len <= 0)
{
return;
}
try
{
byte[] buffer = new byte[len];
Marshal.Copy(data, buffer, 0, len);
// 在主线程中触发事件
if (instance != null)
{
// 直接调用如果需要线程安全可以使用Unity的主线程调度
instance.OnMessageReceived?.Invoke(buffer);
// 打印收到的消息(用于调试)
string message = System.Text.Encoding.UTF8.GetString(buffer);
Debug.Log($"[EmbeddedAppletSDK] 收到消息: {message}");
}
}
catch (Exception e)
{
Debug.LogError($"[EmbeddedAppletSDK] 处理消息异常: {e.Message}");
}
}
#endregion
}

View File

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

View File

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

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 02bac7fb9dd1737a77a1cefdfc4719a7
guid: 0d0fc614a9122f1bfd17494548985ae7
DefaultImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fe5f0b1df5ece6db9e7bcd950e0a378c
guid: c3e43a5c48cb98d01cd83e61b163fa20
DefaultImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0d349b55dbee7bd33a1ced6bb994fece
guid: 1998150206c57d7e5e40890658742e69
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2e4b6e1bc5be5151d50ab921ffa5839d
guid: 67ef4326c066d8ce2c78ed0e1d95fb4d
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 466c37b22fdc3c1129cbb1a55d1b6028
guid: 7a56bd573b238afb9438eb9721225f8c
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 24a1aec51f7a18fcae7859dcb402e1ef
guid: c57ec23b29daf0b347f5aedd4971b9a1
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 16c9a04f91e93806946206fae2bd4e25
guid: 87c21f4acf1bd29c71e0727e0853a7b3
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 387ea2d705e10ad7c6c6c58d5ff1ec2d
guid: 3d8b8e4a751e3b72af4f00ae3329636c
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ae5ea647dd56be9d9147ce0622068f87
guid: fab691fb4c037ef7811f549ead96c777
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7bec551bda276054f1404db3a6532a6d
guid: f2405b0288b19ec1f0f477bbb57ca5a2
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a7a4557bbe95d3ff16f2850d2f8f40a0
guid: 0510350b3a801dc0f64179e39b2230a9
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 42c3401b0efa590af741531dee6558e8
guid: 603a16cf1669dcda3d41c0f72f91a2c5
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f6aa20877eae125bc3a8c4ea53c4f76c
guid: 409da615007e5f975e02ff375297fa13
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1ec68641c6f26f5efc7afbf9bb6c15b2
guid: c30d5fd73784251b11907446e78ef7b4
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c82189a87e1961b18374b5432791a068
guid: 4924fc8645414561a10089f5d3000b22
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 19c3af5719dc3716617093e37f51db69
guid: 4a1efc21f33481808e1769e33427484b
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 442f204e05b524b8ae3ce732846050a7
guid: 8f6ece9a34c0bd474052e300cfb52d60
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7297036e437fba7c2fe297772bc0627e
guid: afb3854cc0a5a822f4bb759efd0a7916
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 37ba760cdf954f6f47c45031afe70f9c
guid: 4f8c9dc73280cd2852a4379a21fff135
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2ebd9ac90103f3ced8c0139a63cc3504
guid: 05cfe1176e2a4b37491f7d475ff33b34
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: dfb4dfe3bcc2bee939eea3c6e08b8bb4
guid: ccd9c5ed67194f1ee3d6faf8d6b97e76
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3e759d2852f0999138f1104930803254
guid: 947ef5c9f4eff3bc636aca2025769b7d
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c8a70f5ead09560fc5dbe8820417b83c
guid: b8ce65220c200bd6e965831b6227be62
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b9a88a64c7136f4cde021e6080e31e87
guid: c3f3abf4da046540dbd54fa69ee8be43
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 20e9d49763ba8f2903f66246a89379cd
guid: 714453da65812ab7fca233644d1fc30a
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c51b1a42a2a16bacf67f6149bcbfa28f
guid: 25b51202ceee6e32f815f41ac7091a10
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0b037fb8bb429ce83e23e2b8e03fd47c
guid: 8f3fcd895c1c7def2bcaa82db0f24a8c
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 899472a0a5ac45899e8016c6396dc64f
guid: a6b12dcac6e36c2460be66892869da8c
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6b4e55a5cc3edd1615f77a90721e9ee5
guid: 4e04335634e3d25c94a9b51212cd2831
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 829adece347ca06c5f3d5c5c852b21ca
guid: 186ce39b19fe673aadce195220f241fe
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f2ede86c1102b3598b5e02e2ba6090ed
guid: 43d30bb7b31fef26208f58dfac1f990b
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 381cfc102176c0190cc75a9bc9432b27
guid: 1c5640c3939d711fc21480bc0c951394
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5750061dda0d3f36b2ddb3cbd5d7b386
guid: a9c0b933bbcad23e2a0e0208dde99536
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0b925492b5e9adb80900bfd72048cd74
guid: 98bfd6f33e7e371d7b9dd3a7aab577d8
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ff9bfe1306070c24562ed5af8ec67b5f
guid: 06a0bbc6c71e7e7cfb160b661be58421
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 82fa57229c9ee045c28bd1cf4632179d
guid: 7b3f8afbf9121215ef927c47ad4b8924
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: dbd9535f9192a7361ec708cc3920d3da
guid: 6492e17e38d2e711ea8a9276cb3fd7b7
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 06c056f773fbe4e518a75d751b47b226
guid: d920e9c927c6eac6174bbf3855381307
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ac551bd0e4d49f8cb3b27251e86167bb
guid: 86858cc65ef0ec0c6983b7b9b586159e
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c33a414c2c035b054a04b4f95acf2cf8
guid: 76456ed9d461a44855232867eafc54ab
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9864142c9f2f75c1a55a4a2dfd35f08c
guid: 6fe81d68965111ce8c1a06737cef99da
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 222bbb8f1bf5df91bed71173a5e949b6
guid: 9089af0c735cf5f091d03ca035f81e16
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: af943114810efb4977ae03d115c029bc
guid: 703016d325cbd0e84a3b18d9a3900848
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ca477bad1c2146c8c08b066bed35f113
guid: a71f51757be1164aa90afe0326d05dca
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 49b0227fe0f6fc27522edc434345becb
guid: f60fd9ec461a1cd2d804a7646a66bf34
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3bd11bb2137ff59cdb7f600b6c596500
guid: 4ec7c0c8fc17fa109362d4c4040bf138
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a63a436a4ba1b9c3db5607d1ffb641f1
guid: 9e8d8790a29642a48aae73be3e2fecbe
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e71729b7f7e3f41cf839fd99ae298f26
guid: c43228c3937578a79ad43ea27ae1cf88
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 06b0ae7d5fb15f8fe28a52e221bd9ee8
guid: 49b6508fc8bf06cfc5a72ec59c1268f0
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 88eed435991d2d680e780e81e103cd6d
guid: 35803cf65b8abc35d8796ce167c86b25
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6d578ec09dc158d2aa1162bf70a2ca79
guid: 5644015d0f75afdb6b10c830ef60d2e3
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: efe4474c70ea74ef212e103f893a222f
guid: ee081ed2bb418754939bdff329631bb9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 34822456e7d19f2d21c944280e327957
guid: 7906ac54a48a284da65a30377d0225bb
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 78458c484d03e15036ae29e5c6590b1f
guid: 3ef68a96e17acd13f1cc3239d356b3ef
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d5356f3f7b6fbad617dde78e38947eeb
guid: fabd2ea9e527ab9167fd9558fb0a87c9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 36655532d166633d187e874d6820e74d
guid: 4ac071cccb4331b3eb7913d455b84b70
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f5aa29c43dd6c032e4390ab93afbd73b
guid: 561d87d3d6f75339413393851a16cca6
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f8848223e2d7f1ef2c13c23a76d6f25d
guid: 2511017d093720e8657ec55ab53be0bf
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7b109999c54342d666701e0f7d05801d
guid: 3d7c78f9be7ef92594c1f1984a006f26
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1e93c9bf43f0172d6fdf3742ed1b071e
guid: 27429ca170a12eb731543d22b75752d6
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 04286a0a385ae2e46f9049d6cb1e5689
guid: df4104ad904d8a98872ef54cfc99ce31
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3d34717a4caaed8768e80073cdce31bb
guid: a32d1ea289bcfbc28e6414e6bedb2575
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4c37ade458ee907660147465d6cf72d6
guid: dd5233485a2de4b36f09e3254e14c762
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 53e83562c95813e6c02dfb2432db15c8
guid: 141db4b3c6319fdb9df0d1e4e1cf0c1c
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 10c3ee848512230acae81923de4f6c65
guid: 3d079a33edf604205bcd76076e1ca41d
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2942ca35988a52a475fbb2dae2a9fa49
guid: 41c65f5c45095d46fe5c95d0c4e895c4
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4cf9d9392c88e6754414191f5a0ddcef
guid: 1478f38b32937a4e2188e80b17db9493
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f0bff13230b3ffbc5d353d3f10ff3299
guid: cd7c12c2cb652f6fec3235eadbd3539f
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6bd694c749f5788d7ca4cde96b012328
guid: 99c113bc531f3f982398eee45bd5dc2b
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 685f7cf847990d7f2962b982faa424ef
guid: 54ddd1502cdff5a1f26ad9f3e66ad6ef
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e925d592bc3c0ab6d13f599b62f92b7d
guid: 48f8554beb2af3cd20af68974a989550
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 15f5000ee10e9fb6e756af19a9d4a4d3
guid: 6e7043bfbb90f3861feba3ed26645301
DefaultImporter:
externalObjects: {}
userData:

View File

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

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 79ec610f49714a93abe6f6786eaec30f
guid: 9cac21afdcb0f7c5191a2b8065926f02
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 10693f530685d10b7cab129deeb59024
guid: f80c4e5b6412ecedf548c6c51142acb9
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 132242cef0c5fd36997210f30c989ac3
guid: ea019c5e7bf00ac9105de13bacb2628a
DefaultImporter:
externalObjects: {}
userData:

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