J'ai lu plusieurs fois ce modèle (du point de vue des meilleures pratiques):
Allocation de mémoire : au lieu d'instancier le nouvel objet à la volée, pensez toujours à créer et à utiliser des pools d'objets. Cela contribuera à réduire la fragmentation de la mémoire et à rendre le garbage collector moins efficace.
Cependant, je ne sais pas ce que cela signifie réellement. Comment puis-je l'implémenter?
Par exemple, je peux instancier un en GameObject
utilisant la Instantiate
méthode Unity?
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
Cette utilisation est-elle déconseillée? Que peut-il signifier d'autre?
unity
c#
design-patterns
memory-efficiency
Muhammad Faizan Khan
la source
la source
Réponses:
Si vous prévoyez d'instancier de nombreuses instances du même préfabriqué, vous devez absolument penser à utiliser le pool d'objets. L'appel de la fonction Instantiate d'Unity est l'un des appels de méthode les plus taxables que vous puissiez faire.
Le regroupement d'objets consiste à instancier des préfabriqués avant de les utiliser. Ils sont désactivés immédiatement lors de l'instanciation et réactivés uniquement lorsqu'ils sont nécessaires. Bien que cela augmente l'utilisation de la mémoire, cela évite la surcharge du processeur de l'instanciation pendant le jeu.
Par exemple, je travaille actuellement sur un jeu d'enfer qui nécessite la génération de centaines de balles lors de l'exécution. J'ai d'abord essayé de faire le jeu sans regroupement d'objets mais cela a fini par être un désastre (moins de 2 fps). Maintenant, je rassemble 500 balles avant le début du jeu et le jeu est incroyablement rapide (200 fps).
Il existe des situations où le regroupement d'objets ne peut pas être utilisé. Par exemple, si vous avez un jeu où l'entrée du joueur dicte quel préfabriqué est généré, alors vous n'aurez pas d'autre choix que d'utiliser l'appel normal d'Instantiate. Le regroupement d'objets n'est possible que si vous savez à l'avance quels objets seront nécessaires.
Le didacticiel YouTube de Sebastian Lague est une excellente ressource pour en savoir plus sur le regroupement d'objets: https://youtu.be/LhqP3EghQ-Q
la source