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

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.kler.cn/a/614584.html

相关文章:

  • OpenBMC:BmcWeb 生效路由5 优化trie
  • 网络通信微服务
  • Vue3组件事件用户信息卡练习
  • 扩散模型总结
  • 外观模式(Facade Pattern):复杂系统的“统一入口”
  • 快速入手-基于Django-rest-framework的ModelViewSet终极版(七)
  • 前端路由守卫与后端权限验证,仅使用路由守卫是否安全?
  • 前端 VSCODE 插件开发总结 (后续将出专栏详细讲解开发的细节...)
  • 关于音频采样率,比特,时间轴的理解
  • Reactive编程:应用场景和传统比较
  • java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗
  • 复古半色调褶皱照片效果ps特效滤镜样机 Halftone Crumpled Paper Effect
  • Baklib驱动企业知识管理数字化转型
  • CSS3学习教程,从入门到精通, CSS3 盒子模型的详细语法知识点及案例代码(23)
  • PERL开发环境搭建>>Windows,Linux,Mac OS
  • mac 下配置flutter 总是失败,请参考文章重新配置flutter 环境MacOS Flutter环境配置和安装
  • C 语言的未来:在变革中坚守核心价值
  • 【C++】基础3——正则表达式,静态多态(函数重载和模板),异常处理
  • 实变函数:集合与子集合一例(20250329)
  • 【免费】2007-2019年各省地方财政文化体育与传媒支出数据