当前位置: 首页 > 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/Assets
        string 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 update
    void 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.dtcms.com/a/98322.html

相关文章:

  • Flutter和React Native在开发app中,哪个对java开发工程师更适合
  • 如何看待职场中的“向上管理”
  • c中的变量命名规则
  • 【精修版】【中项】系统集成项目管理工程师:第12章 项目进度管理-12.4估算活动持续时间
  • Python爬虫:开启数据抓取的奇幻之旅(一)
  • 点云库(Point Cloud Library, PCL)
  • 蓝桥复习 1(Init)
  • TCP网络编程与多进程并发实践
  • STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】
  • buildroot(1) -- 编译过程记录
  • [ 工具使用指南 ] | Visual Studio 2019 调试
  • 计算机底层基石:原码、反码、补码、移码深度剖析
  • HTML5 Web 存储学习笔记
  • YOLOv8+ Deepsort+Pyqt5车速检测系统
  • [ CTFshow ] Java web279-web281
  • LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板
  • AI日报 - 2025年3月30日
  • Vue3组合式API与选项式API的核心区别与适用场景
  • JDBC、excute()、DriveManager、Connection、Statement、自建JDBC工具类、占位符
  • GO语言开篇
  • Rust基础语法
  • c++-函数增强
  • JVM介绍
  • 《DeepSeek+Office办公套件使用课程》
  • MSTP+VRRP三层架构综合实验
  • ABAP FPM
  • 污水处理厂人员定位方案-UWB免布线高精度定位
  • 2025“钉耙编程”中国大学生算法设计春季联赛(4)题解
  • 华为交换综合实验——VRRP、MSTP、Eth-trunk、NAT、DHCP等技术应用
  • 如何使用K8S快速部署测试环境