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

Unity中AssetBundle使用整理(一)

一、AssetBundle 概述

AssetBundle 是 Unity 用于存储和加载游戏资源(如模型、纹理、预制体、音频等)的一种文件格式。它允许开发者将游戏资源打包成独立的文件,在运行时动态加载,从而实现资源的按需加载、更新以及减小初始安装包大小等功能。

用途:

减小初始安装包大小:将部分资源(如非首发场景资源、后期更新资源)以 AssetBundle 形式打包,不在初始安装包中包含,降低安装包体积。
资源动态更新:在游戏发布后,可以通过下载新的 AssetBundle 文件来更新游戏资源,无需发布新的游戏版本,实现快速迭代和内容更新。
资源复用:多个场景或项目可以共享相同的 AssetBundle 资源,提高资源利用效率。

二、AssetBundle 的创建

1. 资源标记

1.在 Unity 编辑器中,通过 Inspector 面板为需要打包进 AssetBundle 的资源设置 AssetBundle 名称和变体(Variant)。变体可用于区分不同平台、画质等级等版本的资源。
2.通过脚本方式设置。
代码:使用AssetImporter设置ab包名和变体名,可以设置没有提前配置的包名和变体名

public static class AssetBundleSetter
{[MenuItem("Tools/Set AssetBundle Name")]static void SetAssetBundleName(){// 获取资源路径string assetPath = "Assets/Res/buffIcon_Speed.png";// 获取资源的 AssetImporterAssetImporter importer = AssetImporter.GetAtPath(assetPath);if (importer != null){// 设置 AssetBundle 名称和变体importer.assetBundleName = "obj1";  // 主名称importer.assetBundleVariant = "unity3d";       // 变体后缀// 保存设置importer.SaveAndReimport();Debug.Log($"已设置: {assetPath} -> {importer.assetBundleName}.{importer.assetBundleVariant}");}else{Debug.LogError($"资源不存在: {assetPath}");}AssetDatabase.Refresh(); // 刷新数据库}
}

注:变体(Variant)是什么?
变体是与其一起存储的 AssetBundle 的选项或子类,允许同一组资源的不同变体(如高清/标清材质、多语言文本)共享相同的加载逻辑,运行时动态选择合适版本。

2.构建 AssetBundle

使用BuildPipeline.BuildAssetBundles方法来构建 AssetBundle。此方法需要指定输出路径、构建选项和目标平台。
代码:

public class BuildAssetBundle : MonoBehaviour
{[MenuItem("Tools/Build AssetBundles")]static void BuildAllAssetBundles(){string assetBundleDirectory = "Assets/AssetBundles";if (!Directory.Exists(assetBundleDirectory)){Directory.CreateDirectory(assetBundleDirectory);}BuildPipeline.BuildAssetBundles(assetBundleDirectory,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows);}
}

结果:

 

3.资源分组 

1.逻辑实体分组

逻辑实体分组是指根据资源所代表的项目功能部分将资源分配给 AssetBundle。这包括各种不同部分,比如用户界面、角色、环境以及在应用程序整个生命周期中可能经常出现的任何其他内容。非常适合于可下载内容 (DLC),因为通过这种方式将所有内容隔离后,可以对单个实体进行更改,而无需下载其他未更改的资源。

逻辑实体分组例如:
1.用户界面屏幕的所有纹理和布局数据。
2.一个/一组角色的所有模型和动画。
3.在多个关卡之间共享的景物的纹理和模型。

2.类型分组

相似类型的资源(例如音频轨道或语言本地化文件)分配到单个 AssetBundle。

3.并发内容分组

需要同时加载和使用的资源放到一个AssetBundle。可以将这些类型的捆绑包用于基于关卡的游戏(其中每个关卡包含完全独特的角色、纹理、音乐等)。最常见的用例是针对基于场景的AssetBundle包。在此分配策略中,每个场景AssetBundle包应包含大部分或全部场景依赖项。

注:以下
1.将频繁更新的对象很少更改的对象拆分到不同的 AssetBundle 中
2.将可能同时加载的对象分到一组。例如模型及其纹理和动画
3.如果发现多个 AssetBundle 中的多个对象依赖于另一个完全不同的 AssetBundle 中的单个资源,请将依赖项移动到单独的 AssetBundle。如果多个 AssetBundle 引用其他 AssetBundle 中的同一组资源,一种有价值的做法可能是将这些依赖项拉入一个共享 AssetBundle 来减少重复。
4.如果不可能同时加载两组对象(例如标清资源和高清资源),请确保它们位于各自AssetBundle 中,即分到两个包里
5.如果一个 AssetBundle 中只有不到 50% 的资源经常同时加载,请考虑拆分该捆绑包,即加载后使用时有冗余部分,请拆分AB包
6.考虑将多个小型的(少于 5 到 10 个资源)但经常同时加载内容的 AssetBundle 组合在一起。
7.如果一组对象只是同一对象的不同版本,请考虑使用 AssetBundle 变体。

三、AssetBundle 的加载与卸载

四、AssetBundle 的依赖管理

五、AssetBundle 的版本控制

未完待续。。。

参考:

《Unity3D游戏开发第三版》

AssetBundle - Unity 手册

AssetBundle 简介 - 2019.4 - Unity Learn

资源、资源和 AssetBundle - Unity Learn

AssetBundle 简介 - 2019.4 - Unity Learn

相关文章:

Unity中AssetBundle使用整理(一)

一、AssetBundle 概述 AssetBundle 是 Unity 用于存储和加载游戏资源(如模型、纹理、预制体、音频等)的一种文件格式。它允许开发者将游戏资源打包成独立的文件,在运行时动态加载,从而实现资源的按需加载、更新以及减小初始安装包…...

CMOS内存的地址空间在主内存空间中吗?

CMOS内存(即CMOS RAM)的地址空间不位于主内存地址空间(如0x00000-0xFFFFF)内,而是通过独立的I/O端口地址进行访问,具体如下: ​1. CMOS内存的物理存储与地址机制​ CMOS RAM芯片通常集成在主板…...

大模型应用中常说的Rerank是什么技术?

Rerank技术详解 一、定义与基本原理 Rerank(重排序)是一种在信息检索系统中用于优化搜索结果排序的技术,其核心目标是通过二次评估和排序候选文档,提升结果的相关性和准确性。其运作机制通常分为两阶段: 初步检索:使用传统方法(如BM25关键词匹配或Embedding向量检索)…...

Python-MCPInspector调试

Python-MCPInspector调试 使用FastMCP开发MCPServer,熟悉【McpServer编码过程】【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试 1-核心知识点 1-熟悉【McpServer编…...

C 语言数据结构基石:揭开数组名的面纱与计算数组大小

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在前面的文章中,我们已经学习了 C 语言一维数组的定义和初始化。我们知道数组是用来存储一系列相同类型数据的集合,并通过下标来访问每个元素。但是,除了通过下标访问单个元素,数组名本身在 C 语言中也…...

Java高频面试之并发编程-15

hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:as-if-serial 是什么?单线程的程序一定是顺序执行的吗? as-if-serial 规则 定义: …...

MySQL数据库迁移SQL语句指南

MySQL数据库迁移SQL语句指南 一、基础迁移方法 1. 使用mysqldump进行全量迁移 -- 导出源数据库(在命令行执行) mysqldump -u [源用户名] -p[源密码] --single-transaction --routines --triggers --events --master-data2 [数据库名] > migration…...

Vue:生命周期钩子

深入理解 Vue 的钩子函数(生命周期函数) Vue 的钩子函数(生命周期函数)是 Vue 实例在不同阶段自动调用的函数。可以在 Vue 实例的创建、更新、销毁等阶段插入自己的逻辑。 钩子函数的作用 想象一下,Vue 实例的生命周…...

深入理解设计模式之原型模式(Prototype Pattern)

一、为什么需要原型模式? 在传统对象创建方式中,我们通过new关键字直接调用构造函数创建实例。但当遇到以下场景时: 对象初始化需要消耗大量资源(如数据库连接)需要创建的对象与现有实例高度相似希望屏蔽对象创建的复…...

K8S cgroups详解

以下是 Kubernetes 中 cgroups(Control Groups) 的详细解析,涵盖其核心原理、在 Kubernetes 中的具体应用及实践操作: 一、cgroups 基础概念 1. 是什么? cgroups 是 Linux 内核提供的 资源隔离与控制机制&#xff0c…...

ARMV8 RK3399 u-boot TPL启动流程分析 --start.S

上电后运行的第一支文件&#xff1a;arch/arm/cpu/armv8/start.S CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK1 #include <asm/arch/boot0.h> 跳转到 arch/arm/include/asm/arch-rockchip/boot0.h CONFIG_SPL_BUILD1 b 1f ROCKCHIP_EARLYRETURN_TO_BROMno TINY_FRAMEWORKno …...

【网络原理】数据链路层

目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术&#xff0c;定义了物理层和数据链路层的协议&#xff0c;用于在局域网中传输数据帧。 二. 以太网数据帧 1&#xff09;目标地址 …...

保姆级教程|YOLO11改进】【卷积篇】【4】使用RFAConv感受野注意力卷积,重塑空间特征提取,助力高效提点

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系1.UE5中常用核心类的继承关系1.1.简化版1.2.plantuml图1.3.plantuml代码1.4.关于大写字母U和A2.1.组件和类的关系&#xff0c;组件也是类吗&…...

力扣2680题解

记录 2025.5.9 题目&#xff1a; 思路&#xff1a; 1.计算初始或值&#xff1a;首先计算数组中所有元素的按位或结果 allOr&#xff0c;这表示在不进行任何左移操作时数组的或值。 2.计算固定或值&#xff1a;在计算 allOr 的同时&#xff0c;计算一个 fixed 值&#xff0c;…...

搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务

1、时间同步服务的层级概念 在绝大多数IT工程师实际工作过程中&#xff0c;针对于局域网的时间同步&#xff0c;遇到最多的场景是根据实际的需求&#xff0c;搭建一个简单的NTP时间同步服务以时间对局域网中的服务器、网络设备、个人电脑等基础设施实现同步授时功能。虽然这样…...

虚拟内存:深入解析与性能优化

文章目录 虚拟内存的概念虚拟内存的实现方式虚拟内存的页面置换算法虚拟内存的性能影响结论 在现代计算机系统中&#xff0c;虚拟内存&#xff08;Virtual Memory&#xff09;是一种至关重要的技术&#xff0c;它极大地提高了系统的多任务处理能力和内存利用率。本文将深入探讨…...

元数据和主数据

元数据和主数据是数据管理中的两个关键概念&#xff0c;其核心区别如下&#xff1a; 1. 定义与本质 元数据&#xff08;Metadata&#xff09; “关于数据的数据”&#xff0c;用于描述数据的属性、结构、来源、用途等上下文信息。 示例&#xff1a;数据库表的字段名称、数据类型…...

JavaScript事件处理全解析:从基础到最佳实践

在现代Web开发中&#xff0c;事件处理是构建交互式应用的核心技术。JavaScript提供了多种事件绑定方式&#xff0c;每种方法都有其适用场景和特点。本文将深入探讨7种主流的事件绑定方法&#xff0c;通过代码示例和原理分析&#xff0c;帮助开发者选择最合适的解决方案。 一、…...

高级数据结构:线段树

线段树概述 线段树是一种处理区间问题的优越算法&#xff0c;也是算法竞赛的常客。 线段树的特点是&#xff0c;类似于一棵二叉树&#xff0c;将一个序列分解成多个区间并储存在二叉树上。 例如&#xff0c;把区间 [ 1 , 10 ] [1,10] [1,10]作为树的根节点&#xff0c;然后把…...

精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶

前引&#xff1a;在C语言长达三十余年的演进历程中&#xff0c;每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C11引入的"现代C"范式开始&#xff0c;开发者得以在保留底层控制能力的同时&#xff0c;借助语言特性大幅提升代码的可维护性与安全…...

用ffmpeg压缩视频参数建议

注意:代码中的斜杠\可以删除 一、基础压缩命令&#xff08;画质优先) ffmpeg -i input.mp4 \-c:v libx264 -preset slow -crf 23 \ # H.264编码&#xff0c;平衡速度与质量-c:a aac -b:a 128k \ # 音频压缩-vf "scaleif(gt(a,16/9),1920,-2):if(…...

uni-app学习笔记(二)--vue页面代码的构成和新建页面

vue页面的构成 一.template 模板区&#xff0c;主要放html布局&#xff0c;注意&#xff0c;如果是开发uni-app&#xff0c;模板区不要放div,h1等标签了&#xff0c;用了在小程序和app端起不到作用。具体应该使用哪些组件&#xff0c;可在uni-app官网上查看&#xff1a;组件-…...

机器语言程序、汇编语言程序、硬件描述语言程序、编译程序、解释程序和链接程序

程序类型定义与核心特征处理对象 / 输入输出结果所属领域典型例子 / 作用机器语言程序由二进制指令&#xff08;0/1 序列&#xff09;构成&#xff0c;可被 CPU 直接执行&#xff0c;与硬件架构强绑定。无&#xff08;直接执行&#xff09;无&#xff08;直接运行&#xff09;低…...

智能语音助手的未来:从交互到融合

摘要 随着人工智能技术的不断进步&#xff0c;智能语音助手已经成为我们生活中不可或缺的一部分。从简单的语音指令到复杂的多模态交互&#xff0c;语音助手正在经历一场深刻的变革。本文将探讨智能语音助手的发展历程、当前的技术瓶颈以及未来的发展方向&#xff0c;特别是其在…...

Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计

Redis基础知识 #切换数据库 bd:0>select 2 "OK" bd:2>dbsize "0" #清空数据库 bd:0>flushdb "OK" #设置值 bd:0>set name "lyt" "OK" #查看所有key bd:0>keys *1) "name" #获取key bd:0>get …...

操作系统原理实验报告

操作系统原理课程的实验报告汇总 实验三&#xff1a;线程的创建与撤销 实验环境&#xff1a;计算机一台&#xff0c;内装有VC、office等软件 实验日期&#xff1a;2024.4.11 实验要求&#xff1a; 1.理解&#xff1a;Windows系统调用的基本概念&#xff0c;进程与线程的基…...

Python爬虫实战:研究nodejs aes加密

1. 引言 1.1 研究背景与意义 在当今数字化时代,Web 数据的价值日益凸显。通过爬虫技术获取公开数据并进行分析,能够为企业决策、学术研究等提供有力支持。然而,为了保护数据安全和隐私,许多网站采用了加密技术对数据进行保护,其中 AES 加密是一种常见且安全的加密算法。…...

线程的一些事(2)

在java中&#xff0c;线程的终止&#xff0c;是一种“软性”操作&#xff0c;必须要对应的线程配合&#xff0c;才能把终止落实下去 然而&#xff0c;系统原生的api其实还提供了&#xff0c;强制终止线程的操作&#xff0c;无论线程执行到哪&#xff0c;都能强行把这个线程干掉…...

基于 PostgreSQL 的 ABP vNext + ShardingCore 分库分表实战

&#x1f680; 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战 &#x1f4d1; 目录 &#x1f680; 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战✨ 背景介绍&#x1f9f1; 技术选型&#x1f6e0;️ 环境准备✅ Docker Compose&#xff08;多库 & 读…...

御网杯2025 Web,Msic,密码 WP

Web YWB_Web_xff 审计代码&#xff0c;发现需要$cip2.2.2.1 使用burpsuite抓包&#xff0c;添加X-Forwarded-For:2.2.2.1 然后得到flag YWB_Web_未授权访问 更加题目描述知道需要admin登录&#xff0c;但是现在是guest。 使用burpsuite抓包 发现cookie里面存在user&#xff…...

tensorflow 1.x

简介 TensorFlow&#xff1a;2015年谷歌&#xff0c;支持python、C&#xff0c;底层是C&#xff0c;主要用python。支持CNN、RNN等算法&#xff0c;分CPU TensorFlow/GPU TensorFlow。 TensorBoard&#xff1a;训练中的可视化。 快捷键&#xff1a;shiftenter执行命令,Tab键进…...

[ERTS2012] 航天器星载软件形式化模型驱动研发 —— 对 Scade 语言本身的影响

在《从ERTS学习SCADE发展》中提到&#xff0c;在 ERTS 会议中&#xff0c;Scade团队会在该会议中介绍与Scade相关的工作。在 ERTS 2012 中&#xff0c;Scade 团队介绍了使用Scade作为主要工具&#xff0c;应用在航天器星载软件开发中的相关话题。原材料可参考 《Formal Model D…...

Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步

Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步 📌 项目背景 在大数据实时处理场景中,数据库变更数据的捕获与传输是关键环节。Flink CDC 提供了从 MySQL 等数据库中实时捕获数据变更的能力,并通过 Apache Flink 引擎实现流式处理。 本项目使用 Spring Boot …...

软件体系结构(Software Architecture)

文章目录 1. 分层架构&#xff08;Layered Architecture&#xff09;核心逻辑代码示例&#xff08;伪代码&#xff09;典型场景优缺点 2. 客户端-服务器&#xff08;Client-Server&#xff09;核心逻辑典型交互流程应用场景代码示例&#xff08;RESTful API&#xff09;优缺点 …...

RS485和RS232 通信配置

RS232 目前硬件上支持RS232的有以下板卡&#xff1a; LubanCat-5IO底板&#xff08;含有RS232x2&#xff09; 7.1. 引脚定义 具体的引脚定义可以参考背面的丝印 LubanCat-5IO底板 引脚定义图 7.2. 跳帽配置 LubanCat-5IO底板 鲁班买5IO底板上的RS485和RS232是共用同一组…...

【高数上册笔记篇02】:数列与函数极限

【参考资料】 同济大学《高等数学》教材樊顺厚老师B站《高等数学精讲》系列课程 &#xff08;注&#xff1a;本笔记为个人数学复习资料&#xff0c;旨在通过系统化整理替代厚重教材&#xff0c;便于随时查阅与巩固知识要点&#xff09; 仅用于个人数学复习&#xff0c;因为课…...

【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)

字节序&#xff08;Endianness&#xff09;是计算机系统中多字节数据&#xff08;如整数、浮点数&#xff09;在内存中存储或传输时&#xff0c;​​字节排列顺序​​的规则。它分为两种类型&#xff1a;​​大端序&#xff08;Big-Endian&#xff09;​​和​​小端序&#xf…...

机器学习极简入门:从基础概念到行业应用

有监督学习&#xff08;supervised learning&#xff09; 让模型学习的数据包含正确答案&#xff08;标签&#xff09;的方法&#xff0c;最终模型可以对无标签的数据进行正确处理和预测&#xff0c;可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…...

MIT XV6 - 1.5 Lab: Xv6 and Unix utilities - xargs

接上文 MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find xargs 继续实验&#xff0c;实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX xargs program for xv6: its arguments describe a command to run, it reads lines from the standard …...

Springboot整合Swagger3

Springboot整合Swagger3、常用注解解释、访问Swagger地址出现404、403、拒绝访问等问题_swagger3注解-CSDN博客...

经典音乐播放器——完美歌词 Poweramp Music Player 3 build

—————【下 载 地 址】——————— 【本章单下载】&#xff1a;https://drive.uc.cn/s/d6c480bc47604 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1k0ODFcWMt2n0d?fromfrom_copylink —————【下 载 地 址】——————— 本…...

锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路

引言 在 Python 占据 TIOBE 指数榜首的 2025 年&#xff0c;C 语言以 23.4% 的稳定份额&#xff08;2025 年 5 月数据&#xff09;持续稳居前三&#xff0c;这一现象在编程教育领域尤为显著&#xff1a;全球 92% 的计算机科学本科课程仍将 C 语言作为必修基础课&#xff0c;而…...

深度学习入门:从神经网络基础到前向传播全面解析

深度学习入门:从神经网络基础到前向传播全面解析 🔥 重磅干货! 本文是《深度学习基础与核心技术详解》专栏的开篇之作,将系统性地带你走进深度学习的世界!建议收藏+关注,错过可能要找很久哦~ 目录 深度学习概述神经网络基础 2.1 生物神经元与人工神经元2.2 感知机模型2.…...

Lambda表达式能用在哪些场景?

Lambda表达式是Java 8引入的一种强大特性&#xff0c;它允许以简洁的方式表示匿名函数&#xff08;即没有名字的函数&#xff09;。Lambda表达式可以用于许多场景&#xff0c;尤其是在与函数式接口、Stream API、并发编程等结合时&#xff0c;能够显著简化代码并提高开发效率。…...

英语听力口语词汇--2.宣传类

1.approach uk /əˈprəʊtʃ/ n.&#xff08;思考问题的&#xff09;方式&#xff0c;方法&#xff0c;态度 2.foreign uk /ˈfɒr.ən/ adj.外国的 3.alliance uk /əˈlaɪ.əns/ n.结盟国家&#xff08;或团体&#xff09;,同盟国家&#xff08;或团体&#xff09;&...

『 测试 』测试基础

文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…...

Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析

Pandas 时间处理利器&#xff1a;to_datetime() 与 Timestamp() 深度解析 在数据分析和处理中&#xff0c;时间序列数据扮演着至关重要的角色。Pandas 库凭借其强大的时间序列处理能力&#xff0c;成为 Python 数据分析领域的佼佼者。其中&#xff0c;to_datetime() 函数和 Ti…...

支持向量机的回归用法详解

支持向量机的回归用法详解 在机器学习的广阔领域中&#xff0c;支持向量机&#xff08;SVM&#xff09;是一种极具影响力的算法&#xff0c;它不仅在分类任务上表现出色&#xff0c;在回归任务中同样有着独特的应用价值。本文将深入探讨 SVM 的回归用法&#xff0c;包括其基本…...

计算机基础

今天不和大家分享算法了&#xff0c;最近为什么一直分享算法题&#xff0c;一个是因为最近很忙加上状态不太在线&#xff0c;第二个是因为我报了ICPC的比赛&#xff0c;也就是大学生程序设计大赛&#xff0c;所以平时刷算法比较多一些&#xff0c;虽然说结果上也没有很多的收获…...