# zframework **Repository Path**: Wnity/zframework ## Basic Information - **Project Name**: zframework - **Description**: framework framework framework - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: unitask - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-01-10 - **Last Updated**: 2025-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: zframework ## README # zframework zframework 是一个为 Unity 开发者设计的轻量级框架,旨在用UniTask简化资源管理、对象池、精灵图集生成等功能。它提供了一系列工具类和管理器,帮助开发者快速实现常见的游戏开发需求。 视频教程: [zframework视频教程](https://space.bilibili.com/627098864/lists/6817103?type=season)
## 功能特性 - **资源加载管理**:通过 `UnityResMgr` 和`GlobalResMgr` 类支持同步和异步加载资源,支持多种加载方式。 - **下载管理**:通过 `DownloadFileMgr` 类实现文件的下载功能。 - **网络请求管理**:通过 `WebRequestMgr` 类实现简单的网络请求。 - **精灵图集生成**:通过 `SpriteAtlasGenerator` 类和`UISpriteAtlasCreator` 类在编辑器中生成精灵图集。 - **精灵管理**:通过 `SpriteAtlasMgr` 类管理精灵图集的加载与使用。 - **异步加载sprite和texture扩展**:通过 `SpriteRendererExtend`,`RendererExtend`,`MaterialExtend`,`UGUI_Extend` 类实现 sprite 和texture 资源的异步加载。 - **对象池管理**:通过 `ObjectPool` 类实现高效的对象创建与回收,减少频繁的垃圾回收压力。 - **Coroutine 扩展**:通过 `CoroutineUtil` 类和 `CoroutineUtilUGUI` 类扩展协程功能,能让协程有返回值功能和等待按钮点击功能。 - **单例**:包含MonoBehavior和ScriptableObject的单例泛型实现,和快速生成单例资源功能。 - **SafeArea UI适配器**:可以多种方式适配手机浏海和安全区。
## 安装 1. 若要把zframework全部功能加载到项目中,下面的文本加到Packages/manifest.json里: ``` "com.wnity.zframework": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework", ``` 2. 若只要zframework的部分功能,把下面文本中需要用到的功能加到Packages/manifest.json里: ``` "com.wnity.zframework.singleton": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/Singleton", "com.wnity.zframework.resutil": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/ResUtil", "com.wnity.zframework.spriteatlasutil": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/SpriteAtlasUtil", "com.wnity.zframework.uguiextend": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/UGUI_Extend", "com.wnity.zframework.objectpool": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/ObjectPool", "com.wnity.zframework.coroutineutil": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/CoroutineUtil", "com.wnity.zframework.coroutineutilugui": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/CoroutineUtilUGUI", "com.wnity.zframework.safeareautil": "https://gitee.com/Wnity/zframework.git?path=Assets/zframework/SafeAreaUtil", ``` 3.
## 使用示例
### 资源加载 ```csharp // 异步加载资源 async UniTask Test() { //ResMgr可用于加载Addressable和Resouces的资源,如果加载Shader,也会使用Shader.Find查找 var prefab = await UnityResMgr.Instance.LoadAssetAsync("texture_addresssable_path"); //LoadAssetMgr可用于加载http,streamingAsset,external,Addressable,Resources的资源 var texture = await GlobalResMgr.Instance.LoadTextureAsync("https://texture.path"); var texture = await GlobalResMgr.Instance.LoadTextureAsync(Application.streamingAssetsPath + "/texture.path"); var texture = await GlobalResMgr.Instance.LoadTextureAsync(Application.persistentDataPath + "/texture.path"); var texture = await GlobalResMgr.Instance.LoadTextureAsync("/texture_resources_path"); var texture = await GlobalResMgr.Instance.LoadTextureAsync("/texture_addresssable_path"); // 同步加载资源 var texture = GlobalResMgr.Instance.LoadTexture("https://texture.path"); var texture = UnityResMgr.Instance.LoadAsset("https://texture.path"); //SpriteRenderer,Image有接受字符串路径的异步加载方式,可接受addressable和resources spriteRenderer.SetSprite("resouces_spritePath"); image.SetSprite("addressable_spritePath"); //Renderer,Material,RawImage有接受字符串路径的异步加载方式,可接受http,streamingAsset,external, addressable和resources renderer.SetTexture("https://texturePath"); material.SetTexture(Application.streamAssetsPath + "/texturePath"); rawImage.SetTexture(Application.persistentDataPath + "/texturePath"); renderer.SetTexture("resouces_spritePath"); material.SetTexture("addressable_spritePath"); //同步和异步加载场景,都支持加载Addressable和BuildSettings的场景 bool success = UnityResMgr.LoadScene("sceneNameOrScenePath"); bool success = await UnityResMgr.LoadSceneAsync("sceneNameOrScenePath"); //GlobalResMgr加载文件的文本或byte[],支持http,磁盘,streamingAsset,Addressable,Resources的资源, var text = await GlobalResMgr.instance.LoadTextAsync("http://textpath"); var bytes = await GlobalResMgr.instance.LoadBytesAsync("http://textpath"); //也有同步方法 var text = GlobalResMgr.instance.LoadText("http://textpath"); var bytes = GlobalResMgr.instance.LoadBytes("http://textpath"); //还支持https://github.com/TLabAltoh/Unity-SDF-UI-Toolkit 的异步同步加载texture和sprite SDFUI ui = ...; ui.SetTexture("texturePath"); ui.SetSprite("SpritePath"); } ```
### 下载文件 ```csharp // 异步下载文件,把会文件下到本地,并返回本地文件路径 async UniTask Test() { //下载 var localFilePath = await DownloadFileMgr.Instance.DownloadAsync("http://example.com/file.txt"); //使用 System.IO.File.ReadAllText(localFilePath); } ```
### 对象池使用 ```csharp // 从对象池中获取对象 GameObject prefab = Resources.Load("prefabPath"); GameObject obj = ObjectPool.InstantiateFromPool(prefab); // 将对象回收到对象池 obj.RecycleToPool(); ```
### SpriteAtlas生成 1. 在project 视图中点鼠标右键出菜单项,点选Create => zframework => CreateUISpriteAtlas创建 `SpriteAtlasGenerator` 资源。 2. 配置参数。 ``` Atlas Infos:图集信息 include in build: 是SpriteAtlas的include in build,如非勾选,需用Unity的SpriteAtlasManager.atlasRequested注册手动创建图集事件,zframework的SpriteAtlasLateBindingMgr就是干这个的 Auto Add to Addressable: 自动加到Addressable Addressable Group Name: 图集要加入到addressable的组名 Paths: Sprite或目录的路径 Objs: Sprite或目录的Asset Atlas OutputPath: 生成输出路径 ``` 3. 点击菜单项 zframework => SpriteAtlasUtil => GenerateAtlases" 按钮生成精灵图集。
### 分析UI prefab生成图集配值信息(SpriteAtlasGenerator)和图集: 1. 在project 视图中点鼠标右键出菜单项,点选Create=>zframework=>CreateUISpriteAtlas创建 `UISpriteAtlasCreator` 资源。 2. 配置参数。 ``` UI Prefab Paths:需要分析prefab目录 UI Frame Paths: ui边框图的目录 Altas Output Path: 图集输出路径 Enable Common Atlas: 是否生成公共图集 Auto Add to Addressable: 自己动把图集加到Addressables Separate Addressable group: 是否一个图集一个group ``` 3. 点击菜单项 zframework => SpriteAtlasUtil => CreateUISpriteAtlas" 按钮生成图集配值信息(SpriteAtlasGenerator)和图集。
### SpriteAtlasLateBindingMgr 这是图集 late binding管理器,会自动收集非include in build并可被addressable或resources读取的图集,在运行时会注册SpriteAtlasManager.atlasRequested方法帮助读取图集
### 协程工具CoroutineUtil和CoroutineUtilUGUI 这两个工具主要是为了替代UniTask不适合使用的情况: 1.使用UniTask返回结果要使用泛型,不利于某些环境,例如hybirdclr的一些特定热更情况 ``` //这两个工具主要提供了下面的协程返回值的功能 //返回结果 public IEnumerator TestWithResult() { IEnumerator ReturnResult() { yield return new WaitForSeconds(1); yield return 1; //返回结果,但不能返回null。yield return null代表停一帧 } var c = ReturnResult().WithResult(); yield return c; var result = (int)c.Current; Assert.AreEqual(1, result); } //Button的WaitOnClick示例 public IEnumerator TestWaitOnClick() { var btn = this.gameObject.GetComponent