Estou criando o que é essencialmente meu próprio sistema pré-fabricado. Objetos de jogo são definidos por um arquivo de dados legível por humanos. Gostaria de criar um GameObject vazio, carregá-lo com os componentes definidos no arquivo de dados e tê-lo pronto e aguardando uma Instantiate()
chamada. No entanto, sempre que eu uso GameObject go = new GameObject()
um novo objeto de jogo é adicionado à cena.
Usando o Unity pré-fabricado, eu posso carregar um pré-fabricado como um GameObject, e ele não é adicionado à cena. (Veja o exemplo abaixo)
A lógica por trás disso é que eu gostaria de ter uma lista que contenha GameObjects, alguns gerados pelo carregamento de prefabs do Unity e outros criados pelo meu sistema de prefab personalizado. Isso precisa acontecer em tempo de execução e não pode envolver o Unity Editor (já que o ideal é que os usuários finais possam definir seus próprios arquivos de dados).
Como posso criar um novo GameObject, sem o Unity instanciando-o automaticamente para mim?
Por exemplo, eu posso fazer uma ligação assim:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
E receberei uma lista de GameObjects, nenhum dos quais é adicionado à cena quando a chamada é feita. Essencialmente, estou criando um LoadAll
método para meus próprios prefabs e, da mesma forma, não quero instanciar os GameObjects quando a chamada é feita.
Destroy
o GameObject. O que o remove da cena e o libera, tornando-o inutilizável.
go.SetActive(false)
é a melhor maneira de criar algo como um pool de objetos. Não é exatamente o que você deseja, mas talvez você possa ter um pequeno grupo de objetos inativos que são posteriormente clonados para sua instanciação personalizada.