Menu
CoddyTech

Pourquoi mettre les objets en pool

Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 37 sur 50.

Une arme qui tire 10 balles par seconde pendant une minute appelle Instantiate 600 fois et Destroy 600 fois. Chaque Instantiate copie le prefab avec tous ses composants et exécute leur Awake, OnEnable et Start. Chaque Destroy exécute OnDisable et OnDestroy et laisse la mémoire de l’objet derrière lui sous forme de déchets. Le ramasse-miettes de C# libère cette mémoire plus tard, et son travail se produit sur certaines images et pas sur d’autres, ce qui se traduit par des saccades, particulièrement sur les téléphones moins rapides.

Un pool conserve les objets au lieu de les détruire. Une balle tirée est désactivée avec SetActive(false) et retourne dans le pool ; le tir suivant en récupère une et l’active, et Instantiate ne s’exécute que lorsque le pool est vide. Après les premières secondes de tir, les tirs ne créent rien de nouveau et ne laissent aucun déchet. Lors de la réutilisation, Awake et Start ne s’exécutent pas à nouveau : ils se sont exécutés une fois, à la création de l’objet. Tout ce qui doit être réinitialisé à chaque utilisation, comme un minuteur, la santé ou une vitesse, est réinitialisé dans OnEnable ou par le code qui récupère l’objet.

La mise en pool est utile pour les objets qui sont souvent créés puis éliminés : les balles, les étincelles, les nombres de dégâts, les ennemis d’un jeu à vagues. Elle n’est pas utile pour un boss qui apparaît une seule fois ou un menu qui s’ouvre de temps en temps. Un pool conserve en permanence la mémoire de ses objets inactifs ; il garde donc un nombre raisonnable d’objets et libère les autres.

Essayez vous-même

Cette leçon ne comprend pas de défi de code.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Architecture de jeu dans Unity