Concevoir pour les performances signifie suivre une poignée de meilleures pratiques au fur et à mesure que vous construisez votre expérience. Par rapport à la trouver et la résolution des problèmes de performance plus tard dans le processus de développement, la conception pour les performances à l'avance peut vous sauver beaucoup de temps et d'effort.
Appareils low-end
Les appareils de catégorie inférieure, en particulier les appareils mobiles, ont des limites de mémoire importantes et sont sujets aux crashes en raison d'erreurs de mémoire (OOM) :
Si vous voulez prendre en charge les appareils de gamme inférieure, choisissez un ensemble de base de dispositifs avec certaines caractéristiques de performance, testez votre expérience sur eux tout au long du processus de développement, et faites attention permanente au taux de cadence d'image et à l'utilisation de la mémoire. Au fur et à mesure que vous trouvez des problèmes dans votre expérience, utilisez ces zones pour identifier les limites de vos appareils.
Par exemple, vous pourriez tester une expérience avec le Render (
L'émulateur de l'appareil dans Roblox Studio est utile pour vérifier le ratio de l'aspect et les contrôles, mais n'est pas précis pour l'utilisation de la mémoire ; lorsque vous testez une expérience dans Roblox, il exécute le serveur et le client, ce qui augmente l'utilisation de la mémoire de manière significative.
De manière plus générale, le test sur une variété de dispositifs peut vous aider à vérifier que l'expérience correspond à vos attentes visuelles et de performance à différents niveaux de qualité graphique. Pour un exemple plus détaillé de la façon dont vous pourriez penser à optimiser votre expérience pour les appareils mobiles de faible puissance, voir Réal World Building et Scripting Optimization .
Diffusion et téléportation
La lecture d'instance permet à Roblox de charger et décharger dynamiquement du contenu 3D et est une option idéale pour la plupart des expériences, surtout celles de plus grande taille. La lecture améliore les temps d'arrivée, réduit la mémoire et augmente les taux de cadence. Pour plus d'informations, voir amélioration des performances.
Décomposez de grands endroits en plus petits et utilisez téléportation pour déplacer les joueurs entre eux.
Matériaux et duplication
Les matériaux intégrés utilisent beaucoup moins de mémoire que les textures personnalisées, mais peuvent ne pas correspondre à votre vision artistique. Essayez d'utiliser les matériaux autant que possible pour les textures qui sont centrales dans votre expérience.
Lorsque vous créez des ressources, convertissez-les en packs . Faire des packs partie de votre flux de travail aide à éviter le problème commun de ressources en double avec différents ID, ce qui peut nuire aux performances.
Lorsque vous ajoutez des maillages et des textures, utilisez-les et réutilisez-les plutôt que d'importer des copies dupliquées. En redimensionnant, en tournant et en superposant, vous pouvez créer des environnements riches et variés qui nécessitent très peu de appels de dessin. Pour plus d'informations, voir supprimer les textures dupliquées.
Transparence
- Évitez les valeurs de transparence autres que 0 (visibles) et 1 (invisibles). Lorsque vous utilisez la transparence partielle, faites particulièrement attention à éviter une surcharge de transparence.
Scripting
Lorsque possible, écrivez du code de génération d'événements plutôt que des calculs par cadre. À 60 FPS, le budget total pour chaque cadre est de 16,67 millisecondes (ms). Même les calculs par cadre apparemment mineurs peuvent utiliser une grande partie de ce budget.
Trouvez des moyens de diviser le code en plusieurs morceaux. Si une pièce de code prend 100 ms pour s'exécuter et que vous l'exécutez chaque frame, votre expérience ne peut s'exécuter que sur 10 FPS. Si vous décidez de ne courir le code qu'une fois par seconde dans une expérience qui s'exécute autrement que 60 FPS, 59 de vos morceaux arrivent après 16,67 ms ... et puis un
Au lieu de cela, explorez comment vous pouvez briser le code. Peut-être que vous pouvez exécuter 5 ms de travail par cadre, utiliser task.wait() et avoir le calcul terminé tous les 20 cadres tout en maintenant 60 FPS. Multithreading, parfois appelé Parallel Luau, peut également aider.
Utilisez la méthode RBXScriptConnection:Disconnect() pour empêcher les fonctions d'être appelées inutilement la prochaine fois qu'un événement se déclenche.
Ne appelez pas la même méthode à chaque fois que vous avez besoin d'une valeur. Appnez la méthode une fois, stockez la valeur, puis écrasez-la plus tard si nécessaire.
Ne stockez rien dans ReplicatedStorage . Le client charge tout ce qui est dans ce conteneur. Au lieu de cela, utilisez ServerStorage pour tout ce que le client n'a pas besoin d'accès.