为什么我们需要在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时也是如此。在回答这个问题之前,你需要了解预制件是什么。

预制件只是GameObjectsComponents放在一起,使其可以重复使用。它的使用方式是,如果您需要相同类型的Object,则不必每次都反复手动创建它们。您只需实例化已创建和保存的预制件。当您想要在多个场景之间共享资源时,这非常重要。

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

最后,实例化一个预制件,打包它的副本并放入场景中。任何操作都应该在加载的预制件的实例化对象上完成。

以上是关于为什么我们需要在Unity AssetBundle中的LoadAsset之后实例化已加载的资产?的主要内容,如果未能解决你的问题,请参考以下文章

unity 怎么生成assetbundle

实力封装:Unity打包AssetBundle(番外篇)

unity 发布webgl怎么加载assetbundle

Unity中文本AssetBundle的解析

unity中Assetbundle问题

Unity使用Assetbundle加载 实例化一个了模型 材质和原模型的颜色不同,是啥问题??