# 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群友大佬 “天下游”的全程协助