包含此页的版本:
不含此页的版本:
在项目中加载和管理资产的方式会影响应用程序的内存使用情况、加载时间和构建大小。Unity 提供了多种资产管理系统,每个系统都针对特定用例和项目规模而设计。具有固定内容大小的小型应用程序通常可以使用 Unity 的默认资产管理系统。AssetBundles 和 Addressables 等系统为复杂的资产布局或需要从远程服务器流式传输资产的应用程序提供了更好的管理。
默认情况下,Unity 使用场景列表来确定要包含在构建中的场景和资产及其加载顺序。Unity 仅包含场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表列表,未从这些场景中引用的未使用的场景和资源将从构建中排除。您还可以使用SceneManager应用程序接口以确定如何在项目中加载场景。
例外情况是,如果您在 Resources 文件夹中包含任何场景,或将它们标记为 Addressable,则 Unity 会以不同的方式处理场景。
为了确定要构建的内容,Unity 使用以下信息:
Resources文件夹。选择正确的方法取决于目标平台、内容交付要求以及是否需要动态加载功能等因素。提供以下管理系统:
Resources文件夹,并使用Resources应用程序接口。AssetBundle应用程序接口。然后,您可以远程存储 AssetBundle 并按需下载。AssetBundleAPI,它自动执行了 AssetBundle 系统具有的许多手动流程,并提供了一个 Unity 编辑器界面。直接引用资产管理是在 Unity 中运行时管理资产的默认方式。每当您通过检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表窗口中,您可以创建对该资产的直接引用。构建应用程序时,Unity 会将所有引用的资产保存在与项目中的场景关联的单独文件中。
您可以将直接引用与ScriptableObject实例来有效管理大型资产集并减小构建大小。仅使用直接引用的一个好处是,Unity 仅包含项目在构建中直接引用的资产,因此您的应用程序不会加载不必要或重复的资产。
直接引用有一些限制,如下所示:
有关更多信息,请参阅直接引用资产管理。
资源系统提供了一种管理内存中资产的简单方法。要使用资源系统,请创建一个名为Resources并向其添加资产。在构建过程中,Unity 会在Resources文件夹,并将它们捆绑到包含元数据和索引信息的序列化文件中。然后,您可以使用Resources用于加载和卸载应用程序中的资产的 API。
资源系统具有以下限制:
Resources文件夹始终包含在播放器构建中,即使它们没有被任何内容引用。这可能会导致构建尺寸较大。Resources.Load保留在内存中,直到显式卸载Resources.UnloadUnusedAssets,它卸载了Resources,或者直到卸载使用它们的场景。Resources文件夹,则构建和启动应用程序可能需要很长时间。Resources.Load返回null并成为运行时错误,因此您需要手动跟踪需要哪些资产。它是原型设计的理想系统,也适用于在整个应用程序生命周期内需要资产的小型项目。有关更多信息,请参阅使用资产包在运行时加载资产。
使用AssetBundle系统将资产组织到称为AssetBundles的单独容器文件中。您可以将 AssetBundle 文件存储在项目文件中,也可以远程存储在云中。
这AssetBundle应用程序接口通过允许您按需下载 AssetBundles,最大限度地减少对网络和系统资源的影响。您可以使用此按需行为向应用程序添加 DLC 和发布后内容更新。例如,您可以为游戏交付新内容,而无需用户下载游戏的新版本。 这AssetBundle然后,API 提供了一种从下载的捆绑包中加载和卸载资产的方法。
AssetBundle 系统具有以下限制:
AssetBundleAPI 不会跟踪资产依赖关系。例如,如果您想加载预制件一种资产类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,您可以从中在场景中创建新的对象实例。更多信息AssetBundleAPI 不知道 AssetBundle 是托管在本地还是远程托管,因此您需要跟踪项目中所有 AssetBundle 的位置。有关更多信息,请参阅AssetBundle简介。
Addressables 包在 Unity 编辑器中提供了一个用户界面,用于管理和组织项目中的资产。它建立在AssetBundleAPI 并自动管理依赖项、资产位置和内存分配,否则您必须在 AssetBundle 系统中手动处理这些问题。Addressables 包旨在消除资源和资产包系统的限制,从而更轻松地按需管理资产。
将资产设为可寻址后,你可以在代码中按地址引用它,而不是按其文件名或 AssetBundle 位置引用它,这意味着你可以更改资产的位置,而无需重写任何代码。您还可以使用资产引用来动态加载和卸载资产,这样您就不必始终将场景中的所有资产保留在内存中。
Addressables 系统专为将资产存储在 CDN 上的应用程序以及可能随着时间的推移进行内容更新的应用程序而设计。如果你的应用程序具有初始下载时附带的固定内容,那么使用直接引用或资源系统是可寻址对象或资产包的更好替代方案。
有关更多信息,请参阅可寻址对象概述
实体包有自己的内容管理系统,你可以在其中使用对资产的弱引用在运行时加载它们。您还可以创建内容存档以将内容交付到应用程序。更多信息,请参考内容管理简介。