Unity 3d:如何在不知道我将使用的确切预制件的情况下在运行时启动预制件?

问题描述 投票:0回答:1

下面提供的代码似乎没有从

prefabname
中生成对象

void load()
{
    string[] files = Directory
        .GetFiles(Application.persistentDataPath, "*.furniture");

    foreach (string file in files)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        FileStream stream = new FileStream(file, FileMode.Open);
        Classforsavingdatafurnitures data 
            = formatter.Deserialize(stream) as Classforsavingdatafurnitures;
        stream.Close();

        // Create game object from prefab
        GameObject prefab = Resources.Load<GameObject>(data.nameofprefab);
        if (prefab != null)
        {
            GameObject obj 
                = Instantiate(prefab, new Vector3(data.position[0], 
                data.position[1], data.position[2]), 
                Quaternion.Euler(data.rotation[0], 
                data.rotation[1], data.rotation[2]));
            obj.name = data.nameofobject;
        }
    }
}

我希望它从文件中获取

nameofprefab
并创建游戏中对象的精确副本。这段代码应该从每个文件加载每个保存的对象
.furniture


如果您需要更多信息,这是来自 GitHub 的 repo

c# file unity3d binary gameobject
1个回答
0
投票

问题一: 在“Savingandloadingfurniture.cs”中,您将

furnit*ur*e
拼错为
furnit*ru*e
。如果没有这样的文件,
foreach
循环甚至不会开始。

问题2: 您的资产中需要一个“资源”目录。它必须被称为exactly,但可以位于子文件夹中并且可以存在多次。它应该包含您要加载的所有内容。如果你想从子文件夹中加载一些东西,你必须记下路径。

© www.soinside.com 2019 - 2024. All rights reserved.