实施例
在Unity5,假设名称为“SomeObject”一个游戏物体在Assets/Resources/SomeObject.prefab
存储为一个预制的,我知道我可以如下创建该预制的一个实例:非实例化的加载的Prefab如何与实例化的比较?
GameObject prefab = Resources.Load<GameObject>("SomeObject");
GameObject instance = GameObject.Instantiate(prefab);
一旦执行,游戏对象instance
将是原始“SomeObject”预制件的副本,并将被放置在当前活动场景中,名称为“SomeObject(克隆)”。
据我了解,在GameObject prefab
代表实际的预制资产,并把它(设置名称,添加成分等)写入到原来的预制资产,而这些变化坚持,即使之后所做的任何更改退出编辑器播放模式。
问题
由于所有GameObjects通常存储在一个场景,并在上面的例子中
scene
财产上GameObject prefab
似乎被卸载/无效/未命名的,正是我应该考虑这个特殊的游戏对象,以是?我似乎能够用它做所有事情,我可以用普通的GameObjects完成任何事情,但在层次结构/场景视图中显示不出来。它有效地处于某种缓冲状态,还是一种特殊的PseudoScene?它似乎通过
LoadSceneMode.Single
场景变化持续存在,但并不像DontDestroyOnLoad
场景那样当对象被传递到GameObject.DontDestroyOnLoad(...)
时被移动到该场景。是否有在上述的例子
prefab
和instance
之间的任何其它值得注意的差异,比寿命的变化,无效场景其他并且是从一个不同的对象另一个(具有不同的GetInstanceID()
等)?由于呼吁
prefab
GameObject.Instantiate(...)
产生一个游戏对象是是一个有效的场景,是有什么办法可以手动创建一个类似的“无现场”状态GameObjects?我知道Unity打算让所有GameObjects出现在场景中,所以这纯粹是一个学术问题。
我试图翻翻functionsinvolved的documentation,但没有进入具体是什么正在发生的技术细节,当你对一个预制资源调用Resources.Load
。
正如你大概可以告诉我有效地一次推出3个问题,我现在处于一个缺乏直觉的位置,以便真正知道我不知道的是什么,如果这是有道理的。再试一次:因为Resources.Load产生的GameObject处于无法手动创建的状态,所以我很好奇这些差异的确切性质,并希望有更多关于幕后操作的知识的人可以提供洞察力进入这里玩的系统,这些系统在正常文档中可能不会立即显现出来。我很抱歉无法更清楚地说出这一点。 – Johannes