当前位置: 首页 > news >正文

AB包介绍及导出工具实现+AB包资源简单加载

Resource原理

        项目中建立Resources目录,资源导入内部

        生成项目包

        资源文件存储路径

结论:存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是无法使用Resources即时更新(不需要关闭手机游戏,即可实现游戏更新) 

崩坏3(应用商店重新下载)

王者荣耀(游戏内直接更新)

AssetBundle(简称AB包)

AB包是独立于游戏主包存在的资源存储文件,使用内部资源时,需要单独下载和加载 。

AB包和Resources的区别

        存储

                Resources内部资源存储在游戏的发布包中

                AB包存储在独立的文件中(AB包存储在非特殊目录下时,不在游戏的发布包中)

        加载

                Resources内部资源使用Resources.Load();

                AB包(可以理解为可下载的Resources)

                        *获得AB包文件(下载,解压streaming拷贝到可写目录

                        通过AB包文件路径,加载AB包文件

                        通过名称(资源名称),加载内部资源

AssetBundle的定义

        AssetBundle是把一些资源文件,场景文件或二进制文件以某种紧密的方式(浅显理解例:压缩包)保存在一起的一些文件。

        AssetBundle内部不能包含C#脚本文件,AssetBundle可以配合Lua实现资源和游戏逻辑代码的更新

热更新

        不关闭Unity应用的前提,实现游戏资源和代码逻辑的更新。

AB包的创建

        资源导入项目

                如果资源未来做更新(资源存储在AB包中),就不要将资源放置在Resources目录下

        资源配置

选中需要添加AB包的资源,填写或选择已存在的AB包名称

AB包配置修改后或AB内部的资源修改后,都需要重新生成AB包

AB包导出工具

        创建Editor文件夹,在该文件夹内编写Editor脚本导出AB包,具体代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;public class ExportAB
{[MenuItem("AB包/导出")]public static void Export(){//项目的Assets路径//D:/Unity_Project/GameUI/Assetsstring path = Application.dataPath;//D:/Unity_Project/GameUI/path = path.Substring(0, path.Length - 6)+"ab";Debug.Log(path);//防止路径不存在if(!Directory.Exists(path)){Directory.CreateDirectory(path);}//导出AB包的核心代码,生成AB包文件//参数1:AB包文件存储路径,参数2:导出选项,参数3:平台(不同平台AB包不同)BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);}
}

编辑器下执行如下:

选择导出后Unity开始为你导出AB包到预期的文件路径

 AB包名称如果配置成这样的结构“ui/package",ui会作为AB包存储的父目录,package是AB包的名称

AB包压缩方式

        不压缩:AB包比较大,加载速度快(CPU不用运算解压缩)

        LZMA算法压缩:默认压缩模式,文件尺寸居中,加载速度居中

        LZ4算法压缩:5.3以后可用,压缩比例高,文件小,加载速度偏慢

依赖关系

        如果一个AB(名称A)包,使用到了另一个AB(名称B)包的资源,那么两个AB包就产生了依赖关系。也就是A依赖于B。

编写顶部菜单栏按钮

        AB包分平台,所以导出的API不同

                        Android

                        iOS

                        Windows

                        Mac

                BuildPipeline.BuildAssetBundles

                        AB存储路径        

                        导出选项

                                None:无任何选项

                                UncompressedAssetBundle:默认LZMA,开启这个选项就不会压缩AB包

                                CollectDependencies:默认开启,开启依赖记录机制

在Unity中加载AB包文件

编写配置文件脚本Config和加载脚本,对应代码如下:

//配置文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Config
{//配置AB包存储的路径public static string ABPath = Application.dataPath.Substring(0, Application.dataPath.Length-6)+"ab";
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class SimpleLoad : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//第一步加载ab文件AssetBundle ab = AssetBundle.LoadFromFile(Config.ABPath+"/test3");//Debug.Log(Config.ABPath + "/test1");//第二步加载资源Sprite sp = ab.LoadAsset<Sprite>("Item");Debug.Log(sp.name);GameObject.Find("/Canvas/Image").GetComponent<Image>().sprite=sp;}
}

 运行结果如下所示:

发现已导出的AB包文件可正常加载 。

        

该系列专栏为网课课程笔记,仅用于学习参考。    


http://www.mrgr.cn/news/96353.html

相关文章:

  • 【蓝桥杯速成】| 15.完全背包
  • 求职笔试题
  • GAMES101-现代计算机图形学入门(Animation/simulation)
  • Enhanced PEC-YOLO:电力施工场景安全装备检测的轻量化算法解析
  • 海量数据处理
  • 【测试】每日3道面试题 3/29
  • 【计网】网络交换技术之电路交换(复习自用)
  • 智能预测维护:让设备“未卜先知”,减少宕机烦恼
  • 第三卷:覆舟山决战(73-108回)正反人物群像
  • Python中multiprocessing的使用详解
  • (一)初始化窗口
  • [AI绘图] ComfyUI 中自定义节点插件安装方法
  • leetcode102 二叉树的层次遍历 递归
  • Android设计模式之单例模式
  • 【学Rust写CAD】16 0、1、-1代数单位元(algebraic_units.rs)
  • 基于Spring Boot + Vue的银行管理系统设计与实现
  • Android设计模式之工厂方法模式
  • Chrome 开发环境快速屏蔽 CORS 跨域限制!
  • Elasticsearch 搜索高级
  • 【qt】文件类(QFile)