Cherchez Unity

À NE PAS faire dans Unity : les erreurs les plus communes

Last updated: December 2018

What you’ll get from this page: A guide that you will want to reference throughout your development. Follow these great tips from Unity field engineer Valentin Simonov that will help you set up a smart and efficient development pipeline, and ultimately ship better and more performant content.

Planification

The most important part of any software development project because decisions made in the this phase will be difficult to change later on in the development cycle.

Manque de recherches avant de commencer un projet

  • Vérifiez que toutes les fonctionnalités prévues fonctionnent sur les plateformes cibles.

The minimally supported devices for your project aren’t specified

  • Define the minimally supported device(s) for your content.
  • Rendez-les disponibles pour vos équipes de développement et de QA.
  • Vous pourrez ainsi définir des performances et un budget réalistes.

Les budgets -ressources et environnements- ne sont pas définis suffisamment tôt.

  • Vous devez définir des budgets pour :
    • les modèles - combien de vertex la plateforme cible peut-elle rendre ?
    • les ressources - quel niveau de détails pour les modèles et les textures ?
    • les scripts et le rendu - quel pourcentage allouer à la logique, le rendu, les effets et d'autres sous-systèmes ?

Plus d'astuces :

Optimiser les performances des graphismes

Modéliser des personnages pour des performances optimisées

La décomposition des scènes et des prefabs n'est pas définie suffisamment tôt.

... ou (en d'autres mots) tout le monde travaille dans la même scène.

  • Diviser les niveaux (activement chargés) en scènes.
  • Déplacer des objets séparés en prefabs et les éditer dans des scènes séparées.
  • S'accorder sur le mécanisme de verrouillage de la scène principale.

Le pipeline de ressources n'est pas assez planifié.

Ce processus consiste à sélectionner les ressources en fonction des artistes du projet.

  • Si possible, faites appel à un artiste technique dès le début pour définir ce processus.
  • Définir des directives claires sur les formats et les spécifications des ressources.
  • Ajouter des tests d’importation.

Plus d'astuces :

Guide des bonnes pratiques en matière de ressources artistiques

Unity Asset importing

Vos processus de compilation et de QA ne sont pas alignés.

  • Set up a build machine, or, turn on and set up Unity Teams.
  • Comment une fonctionnalité sera-t-elle publiée dans la compilation disponible ?
  • Comment les nouvelles compilations sont-elles testées ?
  • Ces tests sont-ils automatisés ?
  • Les statistiques sont-elles enregistrées ?

Unity setup Cloud Build

Les projet n'est pas repris à zéro après les prototypes initiaux.

After building a prototype and getting it approved by the management, strongly consider starting it from scratch.

  • Les décisions prises pendant la phase de prototypage permettent généralement de progresser plus rapidement.
  • Baser votre jeu sur un ensemble de hacks n'est pas un point de départ idéal.

Unity-best-practices-planning

Développement

Les mauvaises pratiques et les erreurs pendant le développement ralentissent l'équipe et affectent la qualité du produit final

Le contrôle de version n'est pas correctement paramétré.

  • Utiliser la sérialisation de texte (par défaut dans Unity).
  • Set up built-in YAML merge tool. See more about SmartMerge ici.
  • Set up commit hooks. See more ici.

Cache Server n'est pas utilisé.

Les données statiques sont stockées dans des fichiers JSON ou XML.

  • Le chargement s'en trouve ralenti.
  • L'analyse génère des déchets.
  • Instead, for built-in static data use ScriptableObjects with custom editor tools.

Le projet contient des ressources et des plugins inutiles ou des bibliothèques dupliquées.

Les ressources inutilisées de votre projet seront probablement intégrées à votre jeu. Ne gardez aucun élément inutile. Si vous définissez un système de contrôle de version, la restauration des fichiers doit être facile.

  • Vérifiez quelles ressources interdépendants de l'Asset Store sont incluses dans le projet. Vous serez surpris de constater que vous pouvez avoir 5 bibliothèques JSON différentes dans le projet.
  • Des ressources et des scripts obsolètes de prototypes précédents.
  • The practice of moving old assets to "removed" folder still results in resources and scripts being built into the game.

Les actions répétitives requièrent une intervention manuelle.

  • Un script d'automatisation doit être associé à chaque tâche répétitive.
  • Make sure that you can "play" the game or interactive content from any scene.
  • Automate all the steps of build process, so that the application can be built with Cloud Build or locally with a press of a button.

Profiler un projet exclusivement dans l'Éditeur.

  • Always profile the content on your target device; if you profile in the Editor only, you can miss actual performance bottlenecks.

Profiler Unity

Ne pas utiliser d'outils de débogage et de profilage intégrés et spécifiques à une plateforme.

Plus d'astuces :

Optimisations des performances générales

Les conseils pour le profilage et l'optimisation de l'éclairage

Unity frame debugger

Le profilage et l'optimisation surviennent trop tard dans le cycle de développement.

  • Plus vous attendez pour profiler, plus les coûts en matière de performances augmentent.
  • Commencez le profilage suffisamment tôt pour vous assurer que votre projet correspond au cadre et aux budgets en matière de mémoire et de taille de disque.

L'optimisation n'est pas basée sur les données de test

  • Assurez-vous d'optimiser les véritables goulots d'étranglement.
  • Les outils indiqués précédemment vous permettront de collecter les données appropriées.

Manque de connaissances concernant votre plateforme cible (ou vos plateformes cibles).

  • Assurez-vous de disposer de suffisamment d'informations concernant votre plateforme cible (ou vos plateformes cibles).
  • Les plateformes bureau, mobile et console présentent des goulots d'étranglement différents.

Unity best practices development

Paramètres des ressources

Les ressources (modèles, textures, sons) doivent occuper la plus grande partie de votre jeu en termes d'espace. Un mesh inapproprié peut annuler toutes les optimisations de vos programmeurs.

Les atlas de sprite ne sont pas correctement paramétrés.

  • Use 3rd-party tools (like Texture Packer) to create atlases or group sprites together in Unity. This will reduce the number of draw calls in the game.

Les textures ne sont pas correctement paramétrées.

  • Vous devez connaître les paramètres de textures appropriés pour la plateforme cible :
    • Quelle compression la plateforme supporte-t-elle ?
    • Les textures requièrent-elles des mipmaps ?
  • Set up an automated way to apply these settings for new textures using l'API AssetPostprocessor as shown by ce projet
  • Empêcher les artistes d'utiliser des textures aux paramètres inappropriés.

Unity Asset import settings

Les groupes de ressources contiennent des textures dupliquées.

  • It is easy to make a mistake in setting up Asset Bundles build system. Get good guidelines ici. It is especially bad for duplicated textures.
  • Use Navigateur de groupe de ressources to track dependencies.

Unity best practices asset settings

Programmation

De mauvaises pratiques et des erreurs dans l'architecture et le développement du code entraînent une productivité réduite.

Le code est très abstrait et difficile à suivre.

  • Un code professionnel abstrait est rarement justifié.
  • Le code est plus difficile à comprendre.
  • Il s'exécute plus lentement et IL2CPP doit générer plus de code.

Les conventions architecturales ne sont pas définies ou sont pauvrement documentées :

  • Mieux vaut évite de rédiger son code de manière à utiliser différentes méthodes pour exécuter la même tâche, par exemple utiliser différents :
    • Formats de configuration (fichiers, propriétés, ressources).
    • Évènements (évènements Unity, évènements C#, SendMessage).
  • Quel manager est responsable de quels objets ?

Les boucles Unity ne sont pas bien comprises.

  • Quand Awake, OnEnable, Update et d'autres méthodes sont appelées.
  • Quand les coroutines sont actualisées.
  • Comment FixedUpdate est exécuté.

La logique d'initialisation du script s'appuie sur l'ordre d'exécution de Unity.

  • Soit « ça fonctionne comme ça », soit en on abuse de la commande d'exécution de script.

Le framerate n'est pas pris en compte lors de la programmation de la logique ou de l'animation.

  • Utilisez Time.deltaTime pour les scripts indépendants FPS.

Plus d'astuces :

3 méthodes efficaces pour créer avec des objets programmables

Pour une expérience de programmation plus agréable

Unity best practices programming

Performances de processeur

High CPU usage results in "laggy" gameplay experience and drains the battery faster.

Unity CPU Profiler

Trop de scripts utilisent la méthode Update()

  • Native -> Managed calls have some overhead. See cet article de blog for more details.
  • Utilisez plutôt les gestionnaires personnalisés.

Tous les comportements personnalisés héritent d'une classe abstraite avec les méthodes Update/Awake/Start définies

  • Maintenant, tous vos scripts utilisent la méthode Update().

Tous les systèmes du jeu sont actualisés à chaque frame.

  • Define how frequently you want to update different systems in your game/content such as:
    • Déplacement d'objets.
    • IA et recherche de chemin.
    • Connexion et sauvegarde de l'état du jeu.
    • Other "heavy" systems.

Les données et les références aux objets fréquemment nécessaires ne sont pas mises en cache

Les données en cache dont vous avez fréquemment besoin sont les suivantes :

  • Reflection
  • Find()
  • Camera.main
  • GetComponent()

Les objets fréquemment instanciés ne sont pas centralisés

  • Instancier des objets est un processus lent.
  • Créez des groupes d'objets dès le début du jeu.
  • Réutilisez des objets au lieu d'en créer de nouveaux.

La mémoire est allouée à chaque frame

  • Même les petites allocations à chaque frame entraîneront tôt ou tard des difficultés.
  • Essayez d'éliminer TOUTES les allocations.

Les API d'allocation de mémoire sont utilisées au lieu d'éliminer les allocations.

  • LINQ.
  • Concaténation de chaîne
  • Matrices retour de l'API Unity :
    • Physics.RaycastAll, Mesh.vertices, GetComponents, etc.

Plus d'astuces :

Travaillez efficacement avec les structures de données C# et les API Unity

Unity best practices CPU performance

Performances GPU

High GPU usage results in low framerate, drains battery faster and the game/content is perceived as "running slow".

Unity GPU Profiler

Pour les plateformes mobiles : le projet a trop d'overdraw

  • Les GPU mobiles peuvent appeler un nombre de pixels maximum par seconde.
  • L'overdraw est l'une des principales causes de faibles performances sur mobile.
  • N’appelez pas d'images transparentes inutiles.
  • Utilisez plus de maillages complexes pour les espaces entièrement transparents.

Pour les plateformes mobiles : les shaders sont trop complexes

  • N'utilisez pas les shaders standards pour les mobiles.
  • Créez des shaders personnalisés.
  • Utilisez des versions simplifiées ou désactivez certains effets pour les périphériques aux performances réduites.

Trop d'éclairages dynamiques sont utilisés avec Forward Rendering

  • Chaque éclairage ajoute une chemin de rendu pour chaque objet éclairé.

Des paramètres inappropriés dans le projet minent le traitement par lots dynamique.

  • Objects must be "similar" to be dynamically batched.
  • Frame Debugger montre pourquoi certains objets n'ont pas été traités par lots.

Les niveaux de détails ne sont pas utilisés ou ne sont pas paramétrés correctement

  • LODs let rendering further objects take fewer resources

Plus d'astuces :

Pourquoi vos requêtes ne sont-elles pas traitées par lots ?

Bonnes pratiques en matière d'optimisation mobile

Unity best practices GPU performance

Performances IU

Même si l'IU Unity est un outil artistique très intuitif, une erreur de paramétrage est vite arrivée. Une telle erreur pourrait entraîner une utilisation trop importante du processeur et du GPU.

Unity UI

Différentes résolutions et ratios ne sont pas pris en compte

  • Testez l'IU sur des appareils avec différentes résolutions et ratios d'aspect.
  • Parfois, mieux vaut créer différents écrans d'IU pour différents appareils.

Les éléments animés sont sur la même toile

  • Quand un élément change, l'élément Canvas doit créer un nouveau maillage combiné.
  • Pour les toiles complexes, cela peut s'avérer coûteux.
  • Déplacez les éléments animés vers des toiles séparées.

"Opening" a new window is not optimized

  • Lorsqu'une nouvelle fenêtre ou une grande partie de l'IU est créée, le jeu connaît une latence significative. Vous devez minimiser cet effet.
  • Simplifiez la fenêtre d'IU.
  • Divisez l'IU en parties.
  • Mettez la fenêtre en cache.

Les listes contiennent trop d'éléments

  • Réutilisez dynamiquement les éléments de la liste au lieu de les créer.
  • Créez une toile imbriquée dans la liste.
  • Use open source implementations, such as ce.

Voir :

Conseils d'optimisation d'IU Unity

Unity best practices UI performance

Plus de ressources

Dites-nous si vous avez aimé ce contenu !

Oui, continuez comme ça Ça pourrait être mieux

Unity Buffbot vous simplifie la tâche

Inscrivez-vous pour recevoir chaque semaine des conseils techniques et créatifs de la part d'experts Unity.

Subscribe
Compris

Ce site utilise des cookies dans le but de vous offrir la meilleure expérience possible. Consultez la page de politique des cookies pour en savoir plus.