在AssetBundle使用手册中,https://docs.unity3d.com/Manual/AssetBundles-Native.html
我可以看到,当使用LoadAsset
加载GameObject时,为什么我们需要执行额外的步骤Instantiate
呢?这将创建另一个预制件副本,我感到困惑,为什么我们不直接使用加载的prefab
GameObject?
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 ?
}
}
答案 0 :(得分:1)
恢复预制件确实与AssetBundle无关。使用Resources.Load
API时也是如此。您需要先了解什么是预制件才能回答这个问题。
预制件只是GameObjects
和Components
放在一起并可以可重复使用。使用它是为了如果您想要相同类型的对象,则不必每次都一次又一次地手动创建它们。您只需实例化已创建并保存的预制件。当您要在多个场景之间共享资源时,这真的很重要。
在加载预制件时,它仅存储在等待使用或实例化的内存中。在场景或“层次结构”选项卡中不可见。没有理由加载函数也应该实例化预制件,因为在加载时可能不需要它。通常,预制件是在加载游戏时加载的,然后在需要时在运行时实例化适当的预制件。
最后,实例化一个预制件,创建一个副本并将其放置在场景中。应该对已加载的预制对象实例化任何操作。