# QFyooassetframework **Repository Path**: vw112266/qfyooassetramework ## Basic Information - **Project Name**: QFyooassetframework - **Description**: 完全不侵入QFramework源代码接入Yooassets资源管理框架 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 34 - **Forks**: 7 - **Created**: 2024-05-10 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: game-dev **Tags**: None ## README # QFyooassetframework #### 介绍 完全不侵入QFramework源代码接入Yooassets资源管理框架 #### 软件架构 QFramework Yooassets Luban #### 安装教程 #### 1. 克隆项目Unity打开项目即可 #### 2. 或者自行按照: 1、自己项目接入Yooasset2.X及以上版本 2、现在分离了QF拓展,使用导入自己项目可以直接复制QFramework文件夹即可,现在可以自由的更新 QF版本 #### 3. 注意 1、QFYooasset中的QFYooAssetsAudioLoaderPool、QFYooAssetsPanelLoaderPool、QFYooAssetRes脚本写死了Yooassets加载的方式是简写加载(即可寻址包名加载,如果要使用全路径需要自行改写这3个脚本中的路径加载) 2、加载方式非常简单:将AOTGameEntry脚本挂载到场景初始化对象上作为程序入口即可; 注意 AOTGameEntry.cs是AOT层入口函数,整个游戏最开始的入口 注意 HotFixGameEntry.cs内涵架构GameAppArchitecture,且是热更新层的入口处 3、QFYooasetModlue.CS脚本中的提供了释放函数,资源更新加载进度函数,可以自行拓展写加载进度UI动画; QFLubanModlue.CS需要再Yoo初始下载资源完毕后调用一次即可正常使用; 4、导表的使用注意直接使用LubanTools文件夹中的gen.bat即可自动生成对应json与c#代码到你当前的项目中! 5、注意LubanTools文件夹位置应该位于你unity项目中且与你的Assets位于同目录下 6、具体luban导表的自定义请查看Luban官方文档,简单易懂 7、文档可以点击以下查看 ### [点击这里查看 API文档](Documentation/API%E6%96%87%E6%A1%A3.md) ### [点击这里查看 使用指南](Documentation/API%E6%96%87%E6%A1%A3.md) ### 简易使用说明 #### 1、AotGameEntry脚本说明 ``` /// /// 资源服务器对接,热更新检查 /// private async void Start() { //远程资源热更新下载对比 GotoDownload(); } private async void StartLoadHotfixDll() { var packages = YooAssets.GetPackage("DefaultPackage"); #if !UNITY_EDITOR //加载热更新DLL逻辑 var goa = packages.LoadAssetAsync(Hotfixdllnames); await goa.Task; var bts = goa.AssetObject as TextAsset; byte[] dllBytes = bts.bytes; System.Reflection.Assembly.Load(dllBytes); //加载aot泛型与热更新dll成功 Debug.Log("热更新dll加载成功"); #endif //编辑器下走直接加载逻辑,HotFixGanmeEntry是挂载了热更新程序集的对象 var go = packages.LoadAssetAsync("HotFixGanmeEntry"); await go.Task; var gbs = go.AssetObject as GameObject; var gb = Instantiate(gbs); } ``` #### 2、HotFixGameEntry脚本说明 ``` using QFramework; using System.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; using YooAsset; public class GameAppArchitecture : Architecture { protected override void Init() { this.RegisterModel(new QFYooassetModule()); this.RegisterModel(new QFLubanModule()); this.RegisterModel(new QFHyclrModule()); } } public class HotfixGameAppMain : MonoBehaviour, IController { //当前脚本是热更新层的脚本,当AOtganmeEntry实例化HotFixGanmeEntry 此处自动加载 private async void Awake() { DontDestroyOnLoad(this); //等待热更泛型补充AOT dll加载完成 #if !UNITY_EDITOR if (await this.SendQuery(new QueryHyclrLoadAotdlls())) StartGames(); #endif #if UNITY_EDITOR //编辑器下可以直接运行 StartGames(); #endif } private void StartGames() { //接受Model层发送过来的事件 this.RegisterEvent(StartGames).UnRegisterWhenGameObjectDestroyed(gameObject); } async void StartGames(StartGamesEvent @event) { //手动初始化因为这个md是要在Yoomd下下载后调用的 this.GetModel().Init(); //声音使用方法 AudioKit.PlayMusic("game_pass", false); //开始使用 var mresLoader = ResLoader.Allocate(); mresLoader.LoadSync("yoo:test").Instantiate().Position(this.Position()).Show(); //场景加载目前只能这样加载 mresLoader.Add2Load("yoo:games", (a, b) => { if (a) { var oper = SceneManager.LoadSceneAsync("games", LoadSceneMode.Single); while (true) { if (oper.progress >= 0.9f) { break; } Debug.Log($"加载场景中...{oper.progress}"); Task.Delay(100); } } }); mresLoader.LoadAsync(); mresLoader.Recycle2Cache(); mresLoader = null; this.SendCommand(); //这里使用的是yoo的简写路径、可以再QFYooAssetsPanelLoaderPool中声明使用简写的路径 //UIKit.OpenPanelAsync().ToAction().Start(this); //等待3秒消毁窗口 await Awaitable.WaitForSecondsAsync(3); //UIKit.ClosePanel(); //测试luban加载 this.GetModel().tables.TbItem.Get(10001).Id.LogInfo(); } public IArchitecture GetArchitecture() { return GameAppArchitecture.Interface; } } ``` 3、其余使用资源加载方式与reskit、AudioKit、UIKit完全相同自行查看QF文档手册即可 #### 参与贡献 1. QFramework,地址:https://qframework.cn/qf 2. Luabn,地址https://luban.doc.code-philosophy.com/docs/manual/loadconfigatruntime 2. 感谢QF群友大佬 “天下游”的全程协助