unityAB包(1/2)

unityAB包学习

      • 1.AB包的导出
        • 扩展BuildAssetBundleOptions
          • 无特殊选项
          • 压缩相关选项
      • 2.AB包资源管理
      • 3.Resource和AssetBundle加载方式的区别
      • 4.预设体
      • 5.Unity Asset Bundle Browser 工具
      • 5为什么要勾选拷贝到StreamingAsset里面。
      • 6.AB包的加载

1.AB包的导出

首先在Project窗口,在Asset窗口下创建一个名为Editor的文件夹,并将AB包导出的代码放于此处,否者将报错。
选择你要打包的内容到某个预设定的包中,下图示意为把Sampleplayr这个预制件预处理放置到charactorAb包中。真正开始导出是使用你自定义的导出按键,代码在下方。
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;public class AssetBundleExport
{[MenuItem("Assets/Export AssetBundles")]//菜单物品:于 Asset按键下方栏目的“Name”按钮。//此处Name是“Export AssetBundles”static void BuildAllAssetBundles(){//静态方法,工具类,不需要实例化,unity内部似乎已经帮我们处理过了string assetBundleDirectory = "E:\\unt\\AssetBundle\\Assets\\ExportAB";if (!Directory.Exists(assetBundleDirectory))//检测路径是否存在{//如果不存在就新建一个文件夹Directory.CreateDirectory(assetBundleDirectory);}//否者导出//参数为 路径/ AB包导出选项(此处为none)/ 导出的目标平台BuildPipeline.BuildAssetBundles(assetBundleDirectory,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows);}
}

unity官方页面:在这里插入图片描述

扩展BuildAssetBundleOptions
无特殊选项

BuildAssetBundleOptions.None
作用:默认选项,不应用任何特殊的构建选项。构建的 AssetBundle 会包含所有依赖项,并且不会进行额外的优化或压缩。

压缩相关选项

在这里插入图片描述
在这里插入图片描述

2.AB包资源管理

AB包导出的资源最好合理分类,不要引用Project中的Resource内的资源文件,否则会多次调用复制。
在这里插入图片描述
为什么呢?是由于unity内部机制决定的!
在这里插入图片描述

3.Resource和AssetBundle加载方式的区别

在这里插入图片描述
也就是说Resource虽然保证了能引用到某个文件,但它不合理的遍历查找方式和重复资源加载和落后的打包发布使得这个系统不如AssetBundle。
但是Resource的操作方便,适合小型游戏的开发。使用Resources系统可以快速地加载和使用资源,无需过多考虑资源的重复加载和打包优化等问题,能够提高开发效率。开发人员可以更专注于游戏的功能实现,而不必花费过多精力在资源管理上。

4.预设体

预设体是一种“反射”并没有真正存储C#代码,而是对C#脚本的一种关联,这就是为什么预设体即使挂载了C#脚本和组件也能放入AB包中。

5.Unity Asset Bundle Browser 工具

工具下载自行百度。
Configure栏
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a1e060b342fe4668a9cf760631111dab.png
build栏
在这里插入图片描述
在这里插入图片描述

下图来源:
于毒,空间链接

    1. LZMA 压缩
      压缩原理
      LZMA 是一种通用的数据压缩算法,采用了字典编码和算术编码相结合的方式,能实现较高的压缩比。它会对整个 AB 包进行压缩,生成一个紧凑的文件。
      优点
      高压缩比:生成的 AB 包文件体积最小,在网络传输时可以节省大量的带宽,减少下载时间和流量消耗,适合需要通过网络大量下载资源的情况,例如手游的资源更新。
      缺点
      加载时间长:在加载 AB 包时,需要先将整个压缩包解压,这个过程会消耗较多的 CPU 资源和时间,导致加载速度变慢。
      解压内存需求大:解压过程需要足够的内存来存储解压后的文件,可能会对内存有限的设备造成压力。
      适用场景
      适用于网络带宽有限、下载速度较慢的场景,例如移动设备通过移动网络下载资源,或者资源更新包较大的情况。
    1. LZ4 压缩
      压缩原理
      LZ4 是一种无损数据压缩算法,它采用块压缩的方式,将 AB 包分割成多个小块分别进行压缩。这样在加载时可以按需解压部分块,而不需要解压整个包。
      优点
      快速加载:由于采用块压缩,加载时可以只解压需要的部分,大大缩短了加载时间,提高了资源的加载效率。
      低内存占用:解压过程中只需要解压当前需要的块,对内存的需求相对较小,适合内存有限的设备。
      缺点
      压缩比相对较低:相比 LZMA,LZ4 的压缩比要低一些,生成的 AB 包文件体积会稍大。
      适用场景
      适用于对加载速度要求较高的场景,例如游戏运行时需要频繁加载和卸载资源的情况,如场景切换、动态加载模型等。
    1. 不压缩
      压缩原理
      不进行任何压缩操作,AB 包以原始的二进制数据形式存储。
      优点
      最快的加载速度:由于不需要进行解压操作,加载 AB 包的速度最快,能够立即使用资源。
      缺点
      文件体积大:AB 包的文件大小与原始资源文件大小基本相同,会占用更多的存储空间,并且在网络传输时需要更多的带宽和时间。

5为什么要勾选拷贝到StreamingAsset里面。

在这里插入图片描述
何时是只读的?
在这里插入图片描述

6.AB包的加载

同一个AB包(指小包)不能够被重复加载,否者报错。

void Start ()
{// 第一步 加载 AB 包AssetBundle ab = AssetBundle.LoadFromFile (Application.streamingAssetsPath + "/" + "model");// 第二步 加载 AB 包中的资源// 只是用名字加载 会出现 同名不同类型资源 分不清// 建议大家用 泛型加载 或者 是 Type 指定类型//GameObject obj = ab.LoadAsset<GameObject>("Cube");GameObject obj = ab.LoadAsset("Cube", typeof(GameObject)) as GameObject;Instantiate(obj);
}
StartCoroutine (LoadABRes ("head", "23_11100001"));
IEnumerator LoadABRes (string ABName, string resName)
{
// 第一步 加载 AB 包AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync (Application.streamingAssetsPath + "/" + ABName);yield return abcr;
// 第二步 加载资源AssetBundleRequest abq = abcr.assetBundle.LoadAssetAsync (resName, typeof 	(Sprite));yield return abq;
//abq.asset as Sprite;img.sprite = abq.asset as Sprite;
}
AssetBundle.UnloadAllAssetBundles(bool unloadAllObjects)

参数含义:该方法有一个布尔类型的参数unloadAllObjects 。当参数为true时,会卸载所有已加载的 AB 包,并且会卸载所有通过这些 AB 包加载到内存中的资源,即便这些资源正被其他部分依赖引用;当参数为false时 ,会卸载所有未被其他资源依赖的 AB 包及其资源,对于正被依赖引用的资源则不会卸载。

AssetBundle ab = AssetBundle.LoadFromFile("path/to/your/assetbundle");
// 加载资源
GameObject obj = ab.LoadAsset<GameObject>("YourGameObject");
// 卸载AB包,不卸载已加载资源实例
ab.Unload(false); 
// 此时obj仍可使用,但不能再从ab加载新资源// 卸载AB包,同时卸载已加载资源实例
ab.Unload(true); 
// 此时obj不可用,相关资源内存被释放

异步卸载包

IEnumerator UnloadABBundleAsync(){// 进行异步卸载,同时卸载已加载资源实例var unloadRequest = ab.UnloadAsync(true);// 等待卸载完成while (!unloadRequest.isDone){yield return null;}Debug.Log("AB包及其已加载资源实例已成功异步卸载");// 此时AB包已卸载,ab引用不再有效,可设置为nullab = null;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法——广度优先搜索——跨步迷宫

原题链接 思路&#xff1a;找出最短路径&#xff0c;然后判断是否存在连续三个点是横纵坐标相等的&#xff0c;如果有就步数减1 但是有两个样例过不了 错误原因&#xff1a;在错误的测试案例中&#xff0c;最短路径可能有多条&#xff0c;而我刚好选了一条比较曲折的&#x…

某酒企数字化转型及电商规划项目启动会暨培训会v(60页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 在当今数字化浪潮席卷之下&#xff0c;企业的发展面临着前所未有的机遇与挑战。对于某酒企而言&#xff0c;数字化转型和电商规划已成为其实现 “二次腾飞”、迈向世界级酒企的关键战略举措。本次启动会暨培训会&#xff0c;为该酒企的转型…

NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的启动流程 区别&#xff1a; .NET6 WebApi第1讲&#xff1a;VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】_vscode webapi-CSDN博客 2、WebApplicationBuilder&#xff1a;是NET6引入的一个类&#xff0c;是建造者模式的典型应用 1>建造者模式的…

vue中根据html动态渲染内容

需求&#xff1a;根据数据中的html&#xff0c;因为我是在做填空&#xff0c;所以是需要将html中的_____替换成input&#xff0c;由于具体需求我使用的是元素contenteditable代替的可编辑的input html部分 <div class"wrap"><component :is"rendered…

【AI】AI编程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine

文章目录 一、基本特性对比二、收费标准三、私有部署能力1、Tabnine2、Roo Code 三、代码补全与自然语言生成代码四、安装独立的IDE安装插件安装 五、基本使用&#xff08;一&#xff09;Cursor&#xff08;二&#xff09;GitHub Copilot1、获取代码建议2.聊天1&#xff09;上下…

三轴云台之角速度信号篇

三轴云台的角速度信号主要通过其内置的传感器&#xff08;如陀螺仪&#xff09;来感知和测量。 一、角速度信号的感知与测量 在三轴云台中&#xff0c;陀螺仪是测量角速度的关键组件。它通常安装在三个互相垂直的轴上&#xff08;通常为X、Y、Z轴&#xff09;&#xff0c;能够…

Grid 布局实现三栏布局

使用 CSS Grid 布局实现三栏布局(左右固定 100px,中间自适应)的核心原理是通过网格模板精确控制列宽分配。以下是具体实现方法及优化技巧: 一、基础实现 ​父容器设置 为外层容器添加 display: grid 使其成为网格容器,并通过 grid-template-columns 定义列宽 css .contain…

绿盟春招实习一面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址&#xff1a;题单中心-东方博宜OJ 这里以二进制转十进制为例&#xff08;按位加权求和法&#xff09; 1290. 二进制转换十进制 问题描述 请将一个 25 位以内的 2 进制正整数转换为 1010 进制&#xff01; 输入 一个 25 位以内的二进制正整数。 输出 该数对应的…

Redis 本地安装

首先安装&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…

9.嗅探与Wireshark进阶分析

嗅探与Wireshark进阶分析 第一部分&#xff1a;嗅探的概念与重要性第二部分&#xff1a;Wireshark进阶功能第三部分&#xff1a;嗅探实践与分析总结 目标&#xff1a; • 理解嗅探&#xff08;Sniffing&#xff09;的概念及其在网络安全中的作用 • 掌握Wireshark的进阶功能&a…

在 VSCode 远程开发环境下使用 Git 常用命令

在日常开发过程中&#xff0c;无论是单人项目还是团队协作&#xff0c;Git 都是版本管理的利器。尤其是在使用 VSCode 连接远程服务器进行代码开发时&#xff0c;Git 不仅能帮助你管理代码版本&#xff0c;还能让多人协作变得更加高效。本文将介绍一些常用的 Git 命令&#xff…

npm 命令使用文档

目录 简介安装与配置基础命令依赖管理版本控制脚本管理包发布高级命令配置管理最佳实践常见问题 1. 简介 npm (Node Package Manager) 是 Node.js 的官方包管理工具&#xff0c;提供&#xff1a; 130万 开源包的注册表访问依赖解析与版本管理项目脚本自动化私有包管理能力完…

【Linux篇】进程控制

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 1. 进程创建 1.1 fork函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个…

HyperAD:学习弱监督音视频暴力检测在双曲空间中的方法

文章目录 速览摘要1. 引言2. 相关工作弱监督暴力检测双曲空间中的神经网络 3. 预备知识双曲几何切空间&#xff08;Tangent Space&#xff09;指数映射与对数映射&#xff08;Exponential and Logarithmic Maps&#xff09;3.1 双曲图卷积网络&#xff08;Hyperbolic Graph Con…

动态规划(6.不同路径II)

题目链接&#xff1a;63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 本题为不同路径的变型&#xff0c;只不过有些地方有「障碍物」&#xff0c;只要在「状态转移」上稍加修改就可解决。 状态表示&#xff1a; 对于这种Γ路径类」的问题&#xf…

深度洞察:DeepSeek 驱动金融行业智能化转型变革

该文章为软件测评&#xff0c;不是广告&#xff01;&#xff01;&#xff01;&#xff01; 目录 一.金融行业的智能化转型浪潮​ 二.DeepSeek的核心技术剖析 1.DeepSeek 模型的金融智慧​ 2.实时联网搜索&#xff1a;把握金融市场脉搏​ 3.RAG 能力&#xff1a;铸就精准金…

蓝桥杯备考----》暴力枚举---金盏花

这道题&#xff0c;一共12位&#xff0c;给了后六位&#xff0c;我们只要枚举前六位就行了&#xff0c;当然如果是10的12次方的话&#xff0c;必须要开long long才可以存下&#xff0c;这点我们不要忘了 然后题目中又告诉了没有前导0&#xff0c;我们可以从100000开始枚举&…

RAG各类方法python源码解读与实践:利用Jupyter对RAG技术综合评测【3万字长文】

检索增强生成&#xff08;RAG &#xff09;是一种结合信息检索与生成模型的混合方法。它通过引入外部知识来提升语言模型的性能&#xff0c;从而提高回答的准确性和事实正确性。为了简单易学&#xff0c;不使用LangChain框架或FAISS向量数据库&#xff0c;而是利用Jupyter Note…

Python列表2

print("—————————— 列表的相关操作 ————————————")lst.append(x)在列表lst最后增加一个元素 lst.insert(index,x)在列表中第index位置增加一个元素 lst.clear()清除列表lst中所有元素 lst.pop(index)将列表lst中第index位置的元素取出&#xf…