logo资料库

Unity+Addressable中文手册1106.pdf

第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
资料共35页,剩余部分请下载后查看
Unity Addressable Asset System可寻址资产系统
Addressable视频教程
【选修】Assetbundle
为什么需要这个系统?
Addressable设计思想
关注点分离:引用与打包资产
运行时内存管理
更快的迭代
什么是资产?
什么是Addressable Asset可寻址资产?
为什么要使用可寻址资产?
现有的游戏怎么办呢?
可寻址资产概述
概念
入门指南
1.安装可寻址资产包
2.准备可寻址资产
1)将资产标记为Addressable
方法1:在Inspector中标记Addressable
方法2:使用Addressable窗口标记资产
2)设置地址
3)【可选】添加Label标签
4)打包
3.使用Addressable Assets可寻址资产
Instantiate()的问题
方法1:通过地址加载或实例化
Addressable加载的优点
特殊情况:加载子资产或组件
组件
子资产
方法2:使用AssetReference类
子资产
使用Label标签加载资源
打包注意事项
StreamingAssets中的本地数据
预下载
为多个平台构建
Addressable资产工作流
传统资产管理
可寻址资产管理
Asset group schema
构建脚本
播放模式脚本
Fast Mode快速模式
Virtual Mode虚拟模式
Packed Play mode打包播放模式
选择正确的Play Mode脚本
分析与调试
初始化对象
内容更新工作流程
工作原理
准备内容更新
构建内容更新
内容更新实例
资产托管(Host)服务
简介
打包模式(Packed Mode)测试和迭代
内容服务器
设置
配置新的托管服务
Profile设置
批处理模式
自定义服务
实现一个自定义服务
内存管理
加载和卸载是对应的
资产加载
场景加载
GameObject实例化
数据加载
背后的交互
Addressable Profiler
何时清除内存?
异步操作处理
类型与无类型的句柄
AsyncOperationHandle用例示例
请注意:
Custom operations自定义操作
创建自定义操作
执行操作
完成处理
终止操作
Addressable Analyze分析器
使用分析器
分析操作
clear(清除)步骤
修复操作
内置的分析规则
Fixable rules可修复的规则
检查组间的重复依赖项
Unfixable rules不可修复的规则
Check Resources to Addressable Duplicate Dependencies(检查Resources资源和Addressable之间的重复依赖项)
Check Scene to Addressable Duplicate Dependencies(检查场景和Addressable之间的重复依赖项)
Build Bundle Layout构建包布局
Check Sprite Atlas to Addressable Duplicate Dependencies(检查Sprite Atlas和Addressable之间的重复依赖项)
扩展分析
AnalyzeRule对象
RefreshAnalysis方法
FixIssues方法
ClearAnalysis方法
将自定义规则添加到GUI
升级到可寻址系统
从直接引用迁移
从Resources文件夹迁移
从Asset Bundle迁移
版本更新日志
[1.3.3] - 2019-10-21
Unity Addressable Asset System可寻址资 产系统 可寻址资产系统提供了一种通过“地址”加载资产的简便方法。它通过简化内容包的打包创建、部署、下 载加载来简化资产管理。 可寻址资产系统使用异步加载,支持从任何位置进行加载,也支持自动加载依赖项。无论你原来使用直 接引用(类似直接在Inspector上引用Prefab),或是使用传统的assetbundle还是 Resources 文件夹 进行资产管理,迁移到Addressable都能让资产管理更简单。 Addressable视频教程 Addressable视频教程链接传送门 本课程为《大话Unity》系列的一个专题,更多专题课程详见《大话Unity》,购买系列课程更优惠。 【选修】Assetbundle 如果你还不了解Assetbundle?没关系,可以略过本教程中和Assetbundle有关的叙述,因为使用 Addressable时不需要你了解Assetbundle系统的具体功能。如果你对Assetbundle感兴趣,可以学习 Assetbundle相关内容: 链接传送门
微信扫描上图二维码可直接查看Assetbundle相关教程 为什么需要这个系统? 在Unity 4中,Unity引入了Assetbundle系统,这个系统可以将资产打包成离散的单元,以便在运行时 动态加载。使用Assetbundle可以将资源与程序安装包分开。这可以让程序的初始安装包保持较小的体 积,同时可以让程序能动态更新资源。 尽管Assetbundle有很多好处,但它是一个偏底层的系统,在实际生产中使用Assetbundle是一项复杂 的任务。Unity中没有直观的工作流来支持assetbundle开发使用的整个生命周期。另外如果想要将 Unity中直接引用和加载资产的方式转到Assetbundle上会很麻烦。将程序从纯静态的内置内容迁移到能 够通过增量更新的动态加载内容,需要大量的重构和自定义编程。因此,对于许多(即使不是大多数) 开发人员来说,是很头大的一件事。 Addressable设计思想 如果你咨询一个有Asset Bundle经验的开发者,几乎他们都编写了自己的类似Addressable的高级系 统。那Unity就发现这件事需要做一下。Addressable的诞生显然是因为需要一个框架来解决关于寻址、 打包和加载资产相关的一系列常见问题。 关注点分离:引用与打包资产 Addressables的主要功能是让你不再关心 prefab,文本资产等,都可以标记为Addressable,并赋予唯一的名称。一旦标记为addressable,就可 以在代码中使用新的AssetReference类型来引用和加载。另外,可寻址资产可以作为内置内容进行打包 和加载,也可以打包成assetbundle以在运行时动态加载。通过这种关注点的分离,有关内容打包和分 发的决策可以推迟到上线之前,而无需更改逻辑代码。 加载。任何资产,包括场景, 资源正在 从 运行时内存管理 什 么 如 何 哪 里
使用Assetbundle加载资源的优势在于:它可以从内存中 不再需要的资源。想要高效地跟踪加载了 哪些资源以及可以安全卸载哪些资源,在没有Addressable之前,是留给开发人员的复杂编程任务。现 在通过Addressable加载的资产及其依赖项,系统会自动进行引用计数,并且不再使用的assetbundle 及其依赖项会自动卸载。此外,Addressables提供了可视化Profiler,用于实时调试已加载的资产和 assetbundle引用计数。 更快的迭代 Addressable为资产加载过程提供了一些重要的抽象概念,内容发生更改时可以更快地迭代。 播放模式模拟:无需打包过程即可直接从磁盘加载资产,同时仍提供通过事件探查器调试资产引用 计数的功能。 快速增量构建:Addressables基于新的*Scriptable Build Pipeline 量构建的速度和可靠性。 Editor Hosting Services :内置的资源托管服务,用于将可寻址内容提供给局域网连接(也可以 利用花生壳,ngrok,natapp等转发到互联网)的设备。这种方法用于迭代设备上的内容非常快 捷,方便。 ,可提高增 什么是资产? 资产是你用来创建游戏或应用的内容。常见的资产类型包括Prefab,纹理,材质,音频和动画。 什么是Addressable Asset可寻址资产? 通过将资产设置为“Addressable”,你可以使用该资产的唯一地址从任何地方获取它。不管该资产存在 本地应用程序中还是位于服务器上,可寻址资产系统都会找到并返回它。你可以通过它的地址加载单个 可寻址资产,也可以使用定义的自定义标签同时加载多个可寻址资产。 为什么要使用可寻址资产? Unity原有的资产管理方式很难用。可寻址对象缩短了迭代周期,使你可以将更多时间用于设计,编码 和测试应用程序。 迭代时间:通过地址引用内容非常有效。对内容的优化不再需要更改代码。 依赖关系管理:系统返回所请求内容的所有依赖关系,以便在将内容返回给你之前加载所有网格, 着色器,动画等。 卸 载 ( 可 编 程 构 建 管 道 )
内存管理:系统加载或卸载资产时,自动计数引用并提供强大的分析器,以帮助你发现潜在的内存 问题。 内容打包:因为系统可以映射并理解复杂的依赖关系链,所以即使在移动或重命名资产时,它也可 以有效打包。你可以轻松地为本地和远程部署准备资产,以支持可下载的内容和减小的应用程序大 小。 现有的游戏怎么办呢? 无论你使用直接引用(类似直接在Inspector上引用Prefab),Resources文件夹还是assetbundle,我 都为你提供了迁移指南(见后续内容)。 可寻址资产概述 可寻址资产系统包含两个Package: Addressable包(主要包) Scriptable Build Pipeline 可编程构建管线包(依赖项) 当安装Addressable包时,Scriptable Build Pipeline包会自动安装。 概念 本文档中引用了以下概念: Address 地址:资产的位置标识符,可在运行时检索。 AddressableAssetData directory:将可寻址资产元数据(配置)存储在项目的Assets目录中。 Asset Group 资产组:可用于打包时处理的一组可寻址资产。 Asset group schema 资产组架构:定义可分配给Asset Group并在打包期间使用的一组数据。 AssetReference:对象的工作方式类似于直接引用,但具有延迟的初始化。该 AssetReference 对象将GUID存储为可按需加载的可寻址对象。 Asynchronous loading 异步加载:允许在开发过程中更改资产及其依赖项的位置,而无需更改 游戏代码。异步加载是可寻址资产系统的基础。 Build script 构建脚本:打包资产的脚本,并为资源管理器提供地址和 Label 标签:提供额外的可寻址资产标识符,可以用来在运行时加载相同label项(例如 Addressables.DownloadDependenciesAsync("spaceHazards"); )。 位置之间的映射。 入门指南 1.安装可寻址资产包 重要提示:Addressables需要Unity 2018.3或更高版本。 1、在Unity的菜单栏中打开:Windows > Package Manager 2、在Package Manager中找到Addressables并安装。 资 源
2.准备可寻址资产 1)将资产标记为Addressable 在Unity Editor中,有两种方法可将资产标记为可寻址: 在选中对象的Inspector中。 在“Addressable”窗口中。 方法1:在Inspector中标记Addressable 在“ Project”窗口中,选择所需的资产。在Inspector窗口中,单击Addressable复选框,然后输入用于 标识资产的地址,默认是资产在Project中的路径。 方法2:使用Addressable窗口标记资产 选择 Window > Asset Management > Addressables 打开Addressables窗口。接下来,将所需资 产从Project窗口拖动到Addressables窗口中任一资产组(同一资产组的资产打包时会包含在一个文件 中)。 2)设置地址
资产的默认地址是项目中资产的路径(例如Assets / images / myImage.png)。要在Addressables窗口 更改资产的地址,右键单击该资产,然后选择“ Rename”(重命名)。 首次使用可寻址资产时,系统会在Assets / AddressableAssetsData文件夹中为你的项目保存一些编辑和 运行时的数据资产,应将其添加到版本控制中。 3)【可选】添加Label标签 Addressable资产不仅可以通过地址加载,还可以通过Label进行批量加载。比如角色皮肤、不同质量的 纹理等等。 那么如何设置资产的Label呢? 1、首先需要在AddressableAssetSettings中添加Label。 2、给资产设置Label,可以逐个设置,也可以多选批量设置。 4)打包
在打包程序之前,需要将Addressable资产打包成游戏运行时可以使用的文件。此步骤不是自动的。你 可以通过编辑器或API打包以下内容: 要在编辑器中打包内容,请打开Addressables窗口,然后选择 Build > Build Player Content。 要使用API打包内容,请使用 AddressableAssetSettings.BuildPlayerContent() 。 3.使用Addressable Assets可寻址资产 开始之前呢,咱们先说说原来的 UnityEngine.Object.Instantiate() 存在的问题。 Instantiate()的问题 Instantiate 这个API你应该很熟悉了,没有Addressable之前,所有GameObject的实例化都要通过 这个方法,但是这个方法存在几个问题: 实例化过程是同步的,也就是程序会阻塞在Instantiate这个地方,直到实例化完成。如果加载大资 源或很多资源容易造成卡顿的情况。 实例化前资源需要已经在本地。如果资源在网络上,需要你自定处理寻址、下载、解包、缓存的过 程,再往前推,你也要自行处理打包的过程。 那么使用Addressable加载有什么不同呢?我们一起来看一下。 方法1:通过地址加载或实例化 你可以在运行时加载或实例化可寻址资产。加载资产时会将所有依赖项加载到内存中(支持 assetbundle),使你可以在需要时使用资产。 要在脚本中使用字符串地址访问资产,先声明 using UnityEngine.AddressableAssets; 名称空间, 然后调用以下方法: Addressables.LoadAssetAsync("AssetAddress"); 加载完成后并不会将所需的资产实例化到场景中。要将资产添加到场景中,还需要一步:实例化。 还有一个加载和实例化二合一的接口,这个接口会加载资产,然后立即将其实例化到场景中: Addressables.InstantiateAsync("AssetAddress"); 这会将具有指定地址的资产实例化到场景中。 注意: LoadAssetAsync 和 InstantiateAsync 是异步操作。你可以在资产完成加载后提供一个回调来 使用资产。(有关更多信息,请学习后续异步操作处理的教程)。 using System.Collections; using System.Collections.Generic; using UnityEngine.AddressableAssets; using UnityEngine; public class AddressablesExample : MonoBehaviour {    GameObject myGameObject;    void Start{        Addressables.LoadAssetAsync("AssetAddress").Completed += OnLoadDone;   }
   private void OnLoadDone(UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle obj)   {        // In a production environment, you should add exception handling to catch scenarios such as a null result.        myGameObject = obj.Result;   } } Addressable加载的优点 InstantiateAsync() 异步实例化,系统不会阻塞 大量实例化不会卡住系统 LoadAssetAsync() 异步加载 资源可以在本地,也可以在远端服务器,而且你在编写代码时不需要关心 特殊情况:加载子资产或组件 子资产和组件是资产加载时的特殊情况。 组件 你不能直接通过可寻址对象加载组件。你必须加载或实例化GameObject,然后从中检索组件引用。要 查看如何扩展可寻址对象以支持组件加载,可参阅ComponentReference示例或学习本教程后续的视频 教程。 子资产 系统支持加载子资产,但是需要特殊的语法。子资产比如Sprite图集中的Sprite或FBX文件中的动画剪 辑。有关直接加载精灵的示例,请参见精灵加载示例或学习本教程后续的视频教程。 要加载资产中的所有子对象,可以使用以下示例语法: Addressables.LoadAssetAsync>("MySpriteSheetAddress"); 要在资产中加载单个子对象,可以执行以下操作: Addressables.LoadAssetAsync ("MySpriteSheetAddress[MySpriteName]"); 资产中子资产可用的地址在Addressable窗口中可见。
分享到:
收藏