Menu
CoddyTech

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.

quiz iconTeste seus conhecimentos

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