使用存储在资源包中对象的 ID 的哈希构建资源包。
此脚本允许您重新构建资源包并在资源包中直接引用资源。
重新构建资源包时,资源包中对象的 ID 将在完成重新构建后
保持不变。
由于这是一个 32 位哈希空间,如果您在资源包中有很多对象,可能会增加哈希冲突的可能性。在这种情况下,Unity 将显示错误,并且不会构建资源包。
哈希基于资源的 GUID 以及对象在资源中的本地 ID。
从 DeterministicAssetBundle 中加载内容也比一般资源包要慢,因为加载 API 的线程后台通常会预期对象以特定方式排序(即读取时减少搜寻的方式)。
使用 DeterministicAssetBundles 时,这是无法实现的。
注意:此功能会始终启用。
//Create a folder (right click in the Assets folder and go to Create>Folder), and name it “Editor” if it doesn’t already exist //Place this script in the Editor folder
//This script creates a new Menu named “Build Asset” and new options within the menu named “Normal” and “Deterministic Asset Bundle”. Click these menu items to build an AssetBundle into a folder with different build options.
using UnityEngine; using UnityEditor;
public class Example : MonoBehaviour { //Creates a new menu (Build Asset Bundles) and item (Normal) in the Editor [MenuItem("Build Asset Bundles/Normal")] static void BuildABsNone() { //Create a folder to put the Asset Bundle in. // This puts the bundles in your custom folder (this case it's "MyAssetBuilds") within the Assets folder. //Build AssetBundles with no special options BuildPipeline.BuildAssetBundles("Assets/MyAssetBuilds", BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX); }
//Creates a new item (Deterministic) in the new Build Asset Bundles menu [MenuItem("Build Asset Bundles/Deterministic ")] static void BuildABsDeterministic() { //Build the AssetBundles in this mode BuildPipeline.BuildAssetBundles("Assets/MyAssetBuilds", BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneOSX); } }