管理资源相关性

资源包中的任何既定资源可能与其他资源相关。例如,一个模型可能包含会依次使用纹理和着色器的材质。您也可将资源的所有相关性一起添加到资源包中。但是,不同资源包中的多个资源可能都与一个常用的其他资源集相关(例如,多栋不同的建筑模型可能使用相同的砖块纹理)。如果有对象使用的每个资源包都包含独立的共享相关性副本,则将在加载资源包时创建多余的资源实例。这将浪费内存空间。

为避免此类浪费,可将共享的相关性分离至独立的资源包,并只从其资源需要此类相关性的任何资源包中引用相关性。首先,需要调用 BuildPipeline.PushAssetDependencies 来启用此引用功能。然后,需要构建包含已引用相关性的资源包。接下来,再次调用 PushAssetDependencies,再构建一个资源包,它引用第一个资源包中的资源。继续调用 PushAssetDependencies 可引入其他级别的相关性。引用级别存储在堆栈上,以便可使用相应的 BuildPipeline.PopAssetDependencies 函数返回至某级别。推送和弹出调用需通过添加构建之前发生的初始推送进行平衡。

运行时,需要加载包含相关性的资源包,然后再加载引用这些相关性的任何其他资源包。例如,您需要加载共享纹理的资源包,然后再加载引用这些纹理的独立的材质资源包。

注意,如果预计需要重新构建属于相关性链的资源包,则需先启用 BuildAssetBundleOptions.DeterministicAssetBundle 选项再进行构建。这可确保每次重新构建资源包时用于验证资源的内部 ID 值都相同。

返回资源包 (AssetBundles) 简介

Page last updated: 2013-06-26