MyFramework 用法说明(一):安装和初始化 本文先从最基础的安装和初始化开始目标是让一个空 Unity 工程能够正确接入 MyFramework并生成默认启动环境。项目地址https://github.com/ZHOURUIH/MyFrameworkMyFramework 是以 Unity Package 形式接入的。安装完成以后菜单栏会出现框架相关菜单其中初始化入口在MyFramework/初始化/初始化框架 MyFramework/初始化/初始化框架HybridCLRObfuz初始化逻辑会复制包内ProjectTemplate~目录下的模板文件创建运行时设置文件修正输入系统配置并把启动场景加入 Build Settings。普通初始化和热更初始化的入口都在MenuInit中分别对应初始化框架和初始化框架HybridCLRObfuz两个菜单。一、安装 MyFramework推荐通过 Unity Package Manager 安装。打开 Unity 菜单Window/Package Manager点击左上角选择Add package from git URL...填入https://gitee.com/inothingtodo/MyFramework.git?path/Packages/com.zhourui.myframework安装完成以后工程的Packages中会出现com.zhourui.myframework二、普通初始化如果只是想先运行框架模板不接入 HybridCLR 和 Obfuz直接执行MyFramework/初始化/初始化框架这个菜单会完成几件事1. 修正 Active Input Handling 2. 复制 ProjectTemplate~ 模板文件到工程目录 3. 保存 FrameEditorSettings 4. 创建 RuntimeSettings 5. 刷新 AssetDatabase 6. 自动挂接 GameEntry 7. 添加启动场景到 Build Settings初始化完成后工程中会生成默认启动场景Assets/Resources/Scene/start.unity框架会在这个场景中查找根节点GameEntry然后把用户工程中的GameEntry脚本挂到这个节点上。三、为什么会自动设置 Active Input HandlingMyFramework 默认启动场景仍然会使用旧输入接口UnityEngine.Input StandaloneInputModule所以如果工程启用了 Unity 新输入系统必须允许旧输入系统同时工作。初始化时会自动尝试把Project Settings/Player/Active Input Handling设置为Both如果当前 Unity 版本没有找到对应设置则需要手动修改。四、初始化时复制了什么初始化时框架会从包内目录复制模板文件Packages/com.zhourui.myframework/ProjectTemplate~/复制目标是 Unity 工程根目录并保持原有相对路径。比如模板中如果有Assets/Scripts/Game/GameEntry.cs Assets/Resources/Scene/start.unity Assets/Scripts/HotFix/HotFixEntry.cs初始化后就会复制到工程对应目录。如果目标文件已经存在初始化会跳过不会覆盖已有文件。这个设计是为了避免重复初始化时把用户已经修改过的模板代码覆盖掉。五、为什么有时初始化后要等 Unity 编译如果复制的模板文件中包含这些类型.cs .asmdef .asmref .rspUnity 会触发脚本重新编译。这时初始化流程不会立刻挂接GameEntry而是先记录一个等待标记等 Unity 编译和 Domain Reload 完成后再自动继续挂接。所以执行初始化后如果控制台出现类似提示MyFramework模板脚本已复制,等待Unity编译完成后自动挂接GameEntry这是正常情况。等 Unity 编译完成后框架会自动打开启动场景找到GameEntry节点并挂接GameEntry脚本。六、启动场景会自动加入 Build Settings初始化成功后框架会把启动场景加入 Build Settings 第一位Assets/Resources/Scene/start.unity如果它已经存在于 Build Settings 中则只会确保它处于启用状态。如果不存在则会插入到场景列表第一位。这样做的目的是保证后续直接运行或打包时入口场景是框架默认启动场景。七、接入 HybridCLR Obfuz 初始化如果项目一开始就准备使用热更新和混淆可以直接执行MyFramework/初始化/初始化框架HybridCLRObfuz这个入口会在普通初始化基础上继续处理1. 安装 HybridCLR 2. 安装 Obfuz 3. 添加 USE_HYBRID_CLR 宏 4. 添加 USE_OBFUZ 宏 5. 等待 Unity 重新编译 6. 写入 HybridCLR 设置 7. 写入 Obfuz 设置HybridCLR 和 Obfuz 的安装地址分别是https://gitee.com/focus-creative-games/hybridclr_unity.git https://gitee.com/focus-creative-games/obfuz.git初始化过程中如果 Unity 正在编译或刷新资源流程会自动等待不需要手动重复点击菜单。八、HybridCLR 初始化会设置什么启用 HybridCLR 后框架会设置 AOT 引用生成路径Assets/Scripts/AutoGenerated/HybridCLRGenerate/AOTGenericReferences.cs同时会把热更新程序集加入 HybridCLR 设置Frame_HotFix HotFix也就是说框架默认把这两个程序集作为热更新程序集。九、Obfuz 初始化会设置什么启用 Obfuz 后框架会设置生成文件路径Assets/Scripts/AutoGenerated/Obfuz/GeneratedEncryptionVirtualMachine.cs同时会把需要混淆的程序集设置为Frame_HotFix HotFix并且会关闭对 Obfuz Runtime 自身的混淆避免运行时被错误处理。十、初始化失败时先检查这些点如果初始化失败通常先检查下面几项1. Packages/com.zhourui.myframework/ProjectTemplate~/ 是否存在 2. Assets/Resources/Scene/start.unity 是否生成 3. start.unity 根节点下是否有 GameEntry 节点 4. 工程中是否存在 GameEntry 脚本 5. Unity 是否还在编译或刷新资源 6. 是否取消了保存当前场景如果控制台提示未找到GameEntry类型通常是 Unity 还没完成编译等待编译结束即可。如果提示启动场景中未找到根节点: GameEntry需要检查start.unity中是否存在名为GameEntry的根节点。十一、初始化完成后的结果初始化完成后一个最小可运行工程应该具备这些内容Assets/Resources/Scene/start.unity GameEntry 节点 GameEntry 脚本 RuntimeSettings Build Settings 中的启动场景 可选的 HybridCLR / Obfuz 配置此时就可以按快捷键F9打开Assets/Resources/Scene/start.unity然后点击 Unity 的 Play 按钮运行框架入口,或者直接在任意场景按F5立即运行游戏。