为什么我们需要在Unity AssetBundle中的LoadAsset之后实例化已加载的资产?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我们需要在Unity AssetBundle中的LoadAsset之后实例化已加载的资产?相关的知识,希望对你有一定的参考价值。
在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 ?
}
}
答案
设置预制件实际上与AssetBundle无关。使用Resources.Load
API时也是如此。在回答这个问题之前,你需要了解预制件是什么。
预制件只是GameObjects
和Components
放在一起,使其可以重复使用。它的使用方式是,如果您需要相同类型的Object,则不必每次都反复手动创建它们。您只需实例化已创建和保存的预制件。当您想要在多个场景之间共享资源时,这非常重要。
加载预制件时,它仅存储在等待使用或实例化的内存中。它在场景或“层次结构”选项卡中不可见。没有理由加载功能也应该实例化预制件,因为加载时可能不需要它。通常在加载游戏时加载预制件,然后在需要时在运行时实例化适当的预制件。
最后,实例化一个预制件,打包它的副本并放入场景中。任何操作都应该在加载的预制件的实例化对象上完成。
以上是关于为什么我们需要在Unity AssetBundle中的LoadAsset之后实例化已加载的资产?的主要内容,如果未能解决你的问题,请参考以下文章