Por que usar um pool de objetos
Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 37 de 50.
Uma arma que dispara 10 balas por segundo durante um minuto chama Instantiate 600 vezes e Destroy 600 vezes. Cada Instantiate copia o prefab com todos os seus componentes e executa Awake, OnEnable e Start. Cada Destroy executa OnDisable e OnDestroy e deixa a memória do objeto para trás como lixo. O coletor de lixo do C# libera essa memória mais tarde, e seu trabalho ocorre em alguns quadros, mas não em outros, o que aparece como uma travada, pior em celulares mais lentos.
Um pool de objetos mantém os objetos em vez de destruí-los. Uma bala usada é desativada com SetActive(false) e volta para o pool; o próximo disparo retira uma bala e a ativa, e Instantiate só é executado quando o pool está vazio. Depois dos primeiros segundos de disparos, atirar não cria nada novo nem deixa lixo. Quando o objeto é reutilizado, Awake e Start não são executados novamente: eles foram executados uma vez, quando o objeto foi criado. Tudo o que precisa recomeçar a cada uso, como um temporizador, a vida ou a velocidade, é redefinido em OnEnable ou pelo código que retira o objeto.
O pooling é útil para objetos que são criados e descartados com frequência: balas, faíscas, números de dano, inimigos de um jogo de ondas. Não vale a pena para um chefe que aparece uma vez ou um menu que abre de vez em quando. Um pool mantém na memória seus objetos inativos o tempo todo, então deve ter uma quantidade razoável e liberar os extras.
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Arquitetura de jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens3Eventos
Eventos de C# no UnityInscreva-se em OnEnableCampos de UnityEventEventos controlam a interfaceRevisão: janela de conquista9Pool de Objetos
Por que usar um pool de objetosUm pool com uma filaO ObjectPool da UnityRecapitulação: pool de projéteis