【问题标题】:why do we need to Instantiate the loaded asset after LoadAsset in Unity AssetBundle?为什么我们需要在 Unity AssetBundle 中的 LoadAsset 之后实例化加载的资源?
【发布时间】:2018-10-21 07:25:31
【问题描述】:

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

我可以看到,当使用LoadAsset加载一个游戏对象时,为什么我们需要做额外的步骤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 ?
    }
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    安装预制件确实与 AssetBundle 无关。使用Resources.Load API 时也是如此。在回答这个问题之前,您需要了解什么是预制件。

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

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

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

    【讨论】:

    • 你的意思是加载任何类型的LoadAsset函数,例如纹理,着色器,材质或场景,我们都需要调用实例化函数吗?还是只需要预制类型?
    • 不,不是任何类型。您询问了预制件,而此答案中的所有内容都在谈论预制件。预制件具有 ".prefab" 扩展名。如果不是这个扩展,那么它不是一个预制件,你可以直接使用它。比如一张纹理图片LoadAsset.&lt;Texture2D&gt;("MyObject")....
    • 我问“为什么我们需要在Unity AssetBundle中LoadAsset之后实例化加载的资产?”只是从它加载的文件恰好是示例代码中的预制件
    • 但是在问题的正文中,您说“我很困惑为什么我们不直接使用加载的prefab GameObject?”。我选择了问题的主体,因为问题的主体通常比标题更具描述性+代码看起来也正在加载预制件。无论如何,我的第二条评论也应该解决标题中的内容。
    • @LiuHao 不是变量名prefab 让我们都“认为”它是一个预制件,而是事实上你可以LoadAsset.&lt;GameObject&gt; 只能在预制件上或ScriptableObject 上,而Instantiate 只能用于预制件或场景中已经存在的游戏对象 => 它似乎是一个预制件 ;) 简而言之:LoadAsset 是编辑器在将新内容拖放到 Project 视图时自动执行的操作。 Instantiate 用作程序员已经解释过的用于创建预制件(或场景中的游戏对象)的新副本到场景中
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2020-07-27
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多