Por que usar um pool de objetos
Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 46 de 64.
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.
Todas as lições de Arquitetura de Jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script base de inimigoComponentes abstratosComponentes trabalhando juntosRevisão: torre modularRevisão: canhão duplo4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de LootRevisão: Sorteie o Loot2Interfaces no Unity
IDamageableInterfaces e TryGetComponentGetComponentsRevisão: tecla de interaçãoRevisão: mais próximo ao alcance5ScriptableObjects
Ativos de DadosAtributos da ArmaConfigurações CompartilhadasSalve o VentoOndas como DadosRevisão: Banco de ItensRevisão: Comprar na Loja3Eventos
Eventos de C# no UnityInscreva-se em OnEnableCampos de UnityEventEventos controlam a interfaceRevisão: pop-up de conquistaRevisão: temporizador do pop-up6Salvando com JSON
JsonUtilitySalve o jogoCarregar e valores padrãoRevisão: slots de salvamentoEscolha e exclua um slot9Pool de Objetos
Por que usar um pool de objetosUm pool com uma filaO ObjectPool da UnityRecapitulação: pool de projéteisPratique por conta própria: Playground de Unity