为什么我们需要在 Unity AssetBundle 中的 LoadAsset 之后实例化加载的资源?



在 AssetBundle 使用手册中,https://docs.unity3d.com/Manual/AssetBundles-Native.html

我可以看到,当使用LoadAsset加载游戏对象时,为什么我们需要Instantiate它执行额外的步骤? 这将创建预制件的另一个副本,我很困惑为什么我们不直接使用加载的prefab游戏对象?

public class LoadFromFileExample extends MonoBehaviour {
function Start() {
var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
if (myLoadedAssetBundle == null) {
Debug.Log("Failed to load AssetBundle!");
return;
}
var prefab = myLoadedAssetBundle.LoadAsset.<GameObject>("MyObject");
Instantiate(prefab); // why do not use prefab directly ?
}
}

预制件的内嵌实际上与 AssetBundle 无关。使用Resources.LoadAPI 时也是如此。您需要先了解预制件是什么,然后才能回答这个问题。

预制件只是GameObjectsComponents放在一起并可重复使用。使用它是为了让您想要相同类型的对象,您不必每次都一遍又一遍地手动创建它们。您只需实例化已创建和保存的预制件。当您想要在多个场景之间共享资源时,这一点非常重要。

加载预制件时,它仅存储在等待使用或实例化的内存中。它在场景或层次结构选项卡中不可见。加载函数没有理由也实例化预制件,因为在加载预制件时可能不需要它。通常,预制件在游戏加载时加载,然后在需要时在运行时实例化适当的预制件。

最后,实例化预制件,将其副本装箱并放入场景中。任何操作都应在加载的预制件实例化对象上执行。

最新更新