我正在创建本质上是我自己的预制系统。游戏对象是由人类可读的数据文件定义的。我想创建一个空的GameObject,将其加载到数据文件中定义的组件中,并准备好等待Instantiate()
调用。但是,每当我使用GameObject go = new GameObject()
新游戏对象时,都会将其添加到场景中。
使用内置在预制件中的Unity,我可以将预制件作为GameObject加载,并且不会将其添加到场景中。(请参见下面的示例)
这背后的基本原理是我希望有一个包含GameObjects的列表,其中一些是通过加载Unity预制件生成的,而另一些是由我的自定义预制系统创建的。这需要在运行时发生,并且不能涉及Unity编辑器(因为理想情况下,最终用户将能够定义自己的数据文件)。
如何创建一个新的GameObject,而Unity却没有自动为我实例化它?
例如,我可以这样拨打电话:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
然后,我将获得一个GameObjects列表,在进行调用时,这些列表都不会添加到场景中。本质上,我正在LoadAll
为自己的预制件创建方法,同样,我不想在调用时实例化GameObjects。
Destroy
GameObject。它将其从场景中删除并释放,使其无法使用。
go.SetActive(false)
是创建对象池之类的最佳方法。这并不是您想要的,但是也许您可以有一小部分不活动的对象,这些对象随后将被克隆以进行自定义实例化。