首页 > 其他分享 >Unity 热更--AssetBundle学习笔记 0.7

Unity 热更--AssetBundle学习笔记 0.7

时间:2024-05-01 23:55:05浏览次数:18  
标签:AB -- 0.7 Unity AssetBundle 卸载 ab 资源 加载

AssetBundle

AB包是什么?

AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包

Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,继而有选择地加载内容。

AB包的优势有哪些?

  1. AB包的存储位置自定义。可以放入可读可写的路径下便于实现热更。
  2. 可以自定义压缩方式。对于压缩方式可以选择不压缩或者LZMA和LZ4等不同的压缩方式压缩,满足不同的网络传输需求。
  3. 资源可以分布在不同的AB包体中,可以最大程度减少运行时候的内存压力,做到即用即加载,针对性的加载。
  4. AB包支持后期进行动态更新。支持热更,可以显著减小初始安装包的大小,非必要的核心关卡可以跟随用户闯关进度来进行资源下载,提高用户的体验。

AB包与Resources的比较?

AB包 Resource
资源可分布在多个包中 所有资源打成一个大包
存储位置可自定义 必须放在Resources目录下
压缩方式灵活 资源全部压缩成二进制
支持后期进行动态更新 打包后资源只读无法动态更改

image-20240501205016476

AB包的特点与要求

  1. AB包无法直接存储C#脚本。代码的热更需要使用lua这类脚本语言,或者存储编译后的DLL文件。
  2. AB包不能重复进行加载。AB包已经加载进内存后必须卸载后才能重新加载。
  3. AB包之间是存在依赖关系的,在加载当前AB包时需要一并加载其所依赖的包。
  4. 打包完成后,会自动生成一个主包(主包名称随平台不同而不同),主包的manifest下会存储有版本号、校验码(CRC)、所有其它包的相关信息(名称、依赖关系)

AB包打包实操

  1. 下载导入Asset Bundles 资源包 【】

    img

  2. 将需要打包的资源进行分组分类

img

  1. 打开AssetBundle 打包窗口进行设置 Build 出包

image-20240501210647890

img

AB包的文件内容分为两类:

一类是资源文件(无后缀名称的)

另一类为mainfest文件 存储AB包体的信息和加载时候所需的关键信息、资源信息、版本信息、依赖关系等等

关键AB包(与目录名同名)为主包 和 AB包依赖的关键信息

image-20240501212511657

加载AB包中的资源

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace LearnAssetBundle
{ 
    public class LoadAsset : MonoBehaviour
    {
        private AssetBundle ab;
        private Image _image;
       
        private void Awake()
        {
            //获取AB包 打包的文件已经拷贝到streamingAssets文件下 从此位置加载
            //注意!AB包不能重复加载
            ab  = AssetBundle.LoadFromFile(Application.streamingAssetsPath +"/"+"model");
            _image = GameObject.Find("Canvas/Image").GetComponent<Image>();
            
        }
        void Start()
        {
            GameObject cube = ab.LoadAsset<GameObject>("cube");
            Instantiate(cube);
           
            //使用异步加载图片资源
            StartCoroutine(LoadPicRes("pic", "bk"));
            
            //释放掉  true 包括场景中的资源
            ab.Unload(false);
        }

        private IEnumerator LoadPicRes(string AbName, string picName)
        {
            AssetBundleCreateRequest picAb = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath +  "/" + AbName);

            AssetBundleRequest abERes = picAb.assetBundle.LoadAssetAsync(picName, typeof(Sprite));
            
            yield return abERes;
            
            _image.sprite = abERes.asset as Sprite;
            
        }
        void Update()
        {
            //AB包资源的卸载
            if (Input.GetKeyDown(KeyCode.Space))
            {
                //卸载所有加载的AB包
                // true 包括场景中正在使用的资源  谨慎使用
                // false 仅卸载ab包的资源 场景中的资源不受影响
                AssetBundle.UnloadAllAssetBundles(false);
            }
        }
    }
}

标签:AB,--,0.7,Unity,AssetBundle,卸载,ab,资源,加载
From: https://www.cnblogs.com/TonyCode/p/18169831

相关文章

  • 启动 Minecraft Forge 服务器
    ThispagewillteachtheplayerhowtoinstallaForgeserver.1.6to1.20.2TextversionFirstly,youneedtheForgeinstaller,whichcanbedownloadedfromtheofficialForgedownloadpage.Oncedownloaded,launchitandchooseoption"Installserv......
  • 2023-2024 ICPC German Collegiate Programming Contest (GCPC 2023)
    B.BalloonDarts首先上一些计算几何的板子。如果\(k\)条直线覆盖\(n\)个点成立的,则有两种情况。如果\(n\lek\)则一定成立,反之在前\(k+1\)个点中必然存在两个点被一条直线经过,我们可以枚举出这条直线,然后暴力的删掉点,然后递归做。#include<bits/stdc++.h>usingnamespaces......
  • 开源文档预览项目 kkFileView (9.9k star) ,快速入门
    kkFileView是一款文件文档在线预览解决方案,采用流行的SpringBoot框架构建,易于上手和部署。该项目基本支持主流办公文档的在线预览,包括但不限于doc、docx、xls、xlsx、ppt、pptx、pdf、txt、zip、rar,以及图片、视频、音频等格式。1Docker部署拉取镜像:#网络环境方便......
  • efcore全局查询过滤器
    我们删除实体时,平常不需要物理删除,而是软删除,软删除有什么好处呢?它能够在下次创建实体时快速恢复实体的信息,平时我们使用IsDeleted字段来代表软删除,以下是一个示例publicclassPost{publicintPostId{get;set;}publicstringTitle{get;set;}public......
  • 不定积分的基本性质
    不定积分有如下两个基本性质property1两个函数之和(差)的不定积分,等于这两个函数不定积分的和(差),即:\[\int[f(x)\pmg(x)]dx=\intf(x)dx\pm\intg(x)dx,\quad\quad\quad(0.0)\]要证明式子(0.0)成立,首先要证明式子(0.0)右侧是左侧被积函数\(f(x)\pmg(x)\)的原函数......
  • 模拟集成电路设计系列博客——6.2.5 毛刺
    6.2.5毛刺数字逻辑的毛刺是转换器进行高速工作时的一个主要问题,\({b_1,b_2,...,b_N}\)与开关信号直接关联。毛刺的来源是开关切换不同信号的延迟。例如,但数字码从\(0111...1\)切换到\(1000...0\)时,所有的\(N-1\)的LSB都关闭,而MSB打开,然而,有可能LSB开关的电流先于MSB开关的电流关......
  • Unity游戏框架设计之背包管理器
    Unity游戏框架设计之背包管理器简单介绍背包系统通常分为两个部分,第一个部分是背包的UI界面,第二个部分是对背包进行逻辑操作的管理器。在下述代码中,实现了对背包的基本逻辑操作,包括向背包添加物品,从背包中取出物品,移动背包中的物品和使用背包中的物品的基本操作,并将这些操作......
  • linux11-vi&vim
    linux11-vi&vimvi\vimvi,visualinterfacevim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,带有语法高亮#文件不存在,则创建并编辑新文件vim不存在路径#文件存在,则编辑已有文件vim已存在路径操作:i键,插入模式ESC,回......
  • 自动安装环境shell脚本使用和运维基础使用讲解
    准备和说明确认有网。依赖程序集,官网只提供32位压缩包,手动编译安装后,在64位机上识别不出来,只能用yum包管理从源上拉下来,需要有网。安装unzip,git,wget,用来解压安装包,如果服务器已有会自动跳过安装yum-yinstallunzipyum-yinstallgityum-yinstallwget使用r......
  • 模拟集成电路设计系列博客——6.2.2 基于R-2R的转换器
    6.2.2基于R-2R的转换器为了避免二进制权重转换器中的巨大电阻比例,可以通过引入串联电阻来使得阵列中的信号缩放,如下图所示:注意此处的节点电压\(V_A\)等于参考电压\(V_{ref}\)的四分之一,作为\(3R\)的串联电阻引入的结果。同时注意一个额外的\(4R\)被添加在地处,从而使得从\(3R\)......