Que recherchez-vous ?
Games

Optimisez les performances de vos jeux mobiles : Obtenez des conseils d'experts sur la physique, l'interface utilisateur et les paramètres audio.

THOMAS KROGH-JACOBSEN / UNITY TECHNOLOGIESProduct Marketing Core Tech
Jul 13, 2021|13 Min
Optimisez les performances de vos jeux mobiles : Obtenez des conseils d'experts sur la physique, l'interface utilisateur et les paramètres audio.
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Notre équipe Integrated Success soutient les clients d'Unity dans leurs problèmes techniques complexes. Nous avons rencontré cette équipe d'ingénieurs logiciels seniors et leur avons demandé de nous faire part de leur expertise en matière d'optimisation des jeux mobiles.

Notre équipe Accelerate Solutions connaît parfaitement le code source et travaille avec une pléthore de clients Unity pour les aider à tirer le meilleur parti du moteur. Dans le cadre de leur travail, ils se plongent dans les projets des créateurs afin d'identifier les points où les performances pourraient être optimisées pour plus de rapidité, de stabilité et d'efficacité.

Lorsque nos ingénieurs ont commencé à partager leurs idées sur l'optimisation des jeux mobiles, nous avons rapidement réalisé qu'il y avait beaucoup trop d'informations intéressantes pour le seul article de blog que nous avions prévu. Nous avons donc décidé de transformer cette montagne de connaissances en un livre électronique complet (que vous pouvez télécharger ici), ainsi qu'en une série d'articles de blog qui mettent en lumière quelques-uns de ces 75+ conseils pratiques.

Dans ce deuxième épisode de la série, nous allons nous pencher sur la façon d'améliorer les performances avec l'interface utilisateur, la physique et les paramètres audio. Au cas où vous l'auriez manqué, consultez notre précédent article sur le profilage, la mémoire et l'architecture du code - et restez à l'écoute de notre prochain article, consacré aux actifs, à la configuration du projet et aux graphiques.

Vous voulez tout savoir maintenant ? Télécharger le livre électronique gratuit.

Entrons dans le vif du sujet !

Physique

La physique intégrée à Unity (Nvidia PhysX) peut être coûteuse sur mobile, mais les conseils suivants peuvent vous aider à obtenir plus d'images par seconde.

Optimisez vos paramètres

Dans les paramètres du joueur, cochez l'option Prebake Collision Meshes lorsque c'est possible.

Image de la boîte de paramétrage du joueur avec un fond gris foncé et le texte "prebake collision meshes*" coché et quadrillé en rouge.
Activer les maillages de collision avant cuisson.

Veillez à modifier vos paramètres de physique(Paramètres du projet > Physique) et à simplifier la matrice de collision des couches dans la mesure du possible.

Désactiver les transformations de synchronisation automatique et activer les rappels de réutilisation des collisions.

Image de la boîte de configuration du projet avec un fond gris et les sections "Auto Sync Transforms" et "Layer Collision Matrix" quadrillées en rouge.
Modifier les paramètres du projet de physique pour améliorer les performances.
Image du module physique du profileur avec la section 5ms montrant l'activité en vert, bleu et orange sur un fond noir.
Gardez un œil sur le module Physique du Profiler pour les problèmes de performance.
Simplifier les collisionneurs

Les collisionneurs de maillage peuvent être coûteux. Remplacer les collisions de mailles plus complexes par des collisions de mailles primitives ou simplifiées afin d'obtenir une forme approximative de la forme originale.

Utiliser des primitives ou des maillages simplifiés pour les collisionneurs.
Utiliser des primitives ou des maillages simplifiés pour les collisionneurs.
Déplacer un corps rigide à l'aide de méthodes physiques

Utilisez des méthodes de classe telles que MovePosition ou AddForce pour déplacer vos objets Rigidbody. La traduction directe de leurs composants Transform peut entraîner des recalculs du monde physique, ce qui est coûteux dans les scènes complexes. Déplacer les corps physiques en FixedUpdate plutôt qu'en Update.

Fixer l'intervalle de temps fixe

Le pas de temps fixe par défaut dans les paramètres du projet est de 0,02 (50 Hz). Modifiez cette valeur pour qu'elle corresponde à la fréquence d'images visée (par exemple, 0,03 pour 30 fps).

Cependant, si votre taux de rafraîchissement chute au moment de l'exécution, cela signifie qu'Unity appellera FixedUpdate plusieurs fois par image et créera potentiellement un problème de performance du processeur avec un contenu à forte composante physique.

Le paramètre Maximum Allowed Timestep limite le temps que les calculs physiques et les événements FixedUpdate peuvent utiliser en cas de baisse de la fréquence d'images. L'abaissement de cette valeur signifie que lors d'un problème de performance, la physique et l'animation peuvent être ralenties, tout en réduisant leur impact sur le taux d'images par seconde.

Image du module de temps fixe à l'intérieur des paramètres du projet avec un fond gris et un texte blanc.
Modifiez le pas de temps fixe pour qu'il corresponde à votre taux de rafraîchissement cible et diminuez le pas de temps maximal autorisé pour réduire les problèmes de performance.
Visualiser avec le débogueur de physique

Utilisez la fenêtre de débogage physique(Window > Analysis > Physics Debugger) pour résoudre les problèmes liés aux collisionneurs ou aux divergences. Ceci montre un code couleur des GameObjects qui peuvent entrer en collision les uns avec les autres.

Image d'un bateau orange avec une superposition de maillage et une ombre bleue à l'intérieur de la boîte de dialogue du débogueur physique.
L'outil de débogage de la physique vous aide à visualiser la manière dont vos objets physiques peuvent interagir les uns avec les autres.

Pour plus d'informations, voir Physics Debug Visualization dans la documentation Unity.

Interface utilisateur

L'interface Unity UI (UGUI) peut souvent être une source de problèmes de performances. Le composant Canvas génère et met à jour les maillages des éléments de l'interface utilisateur et lance des appels de dessin au GPU. Son fonctionnement peut être coûteux, il convient donc de garder à l'esprit les facteurs suivants lorsque l'on travaille avec l'UGUI.

Divisez vos toiles

Si vous avez un grand canevas avec des milliers d'éléments, la mise à jour d'un seul élément de l'interface utilisateur oblige l'ensemble du canevas à se mettre à jour, ce qui peut potentiellement générer un pic d'activité du processeur.

Tirez parti de la capacité de l'UGUI à prendre en charge plusieurs canevas. Divisez les éléments de l'interface utilisateur en fonction de la fréquence à laquelle ils doivent être rafraîchis. Les éléments statiques de l'interface utilisateur doivent être placés sur un canevas distinct et les éléments dynamiques qui sont mis à jour en même temps doivent être placés sur des sous-canevas plus petits.

Veiller à ce que tous les éléments de l'interface utilisateur dans chaque canevas aient la même valeur Z, les mêmes matériaux et les mêmes textures.

Masquer les éléments invisibles de l'interface utilisateur

Vous pouvez avoir des éléments d'interface utilisateur qui n'apparaissent que sporadiquement dans le jeu (par exemple, une barre de santé qui apparaît lorsqu'un personnage subit des dégâts). Si l'élément invisible de l'interface utilisateur est actif, il est possible qu'il utilise encore des appels de dessin. Désactiver explicitement les composants invisibles de l'interface utilisateur et les réactiver si nécessaire.

Si vous avez seulement besoin de désactiver la visibilité du Canvas, désactivez le composant Canvas plutôt que GameObjects. Cela permet d'éviter de reconstruire les maillages et les sommets.

Limiter les GraphicRaycasters et désactiver Raycast Target

Les événements d'entrée tels que les touches ou les clics sur l'écran nécessitent le composant GraphicRaycaster. Il s'agit simplement de parcourir en boucle chaque point d'entrée à l'écran et de vérifier s'il se trouve à l'intérieur de la RectTransform de l'interface utilisateur.

Supprime le GraphicRaycaster par défaut du Canvas supérieur dans la hiérarchie. Au lieu de cela, ajoutez le GraphicRaycaster exclusivement aux éléments individuels qui doivent interagir (boutons, scrollrects, etc.).

Image de la boîte de dialogue raycaster graphique grise avec texte blanc.
Désactiver l'option Ignorer les graphiques inversés, qui est active par défaut.

Désactivez également la cible Raycast pour tous les textes et images de l'interface utilisateur qui n'en ont pas besoin. Si l'interface utilisateur est complexe et comporte de nombreux éléments, tous ces petits changements peuvent réduire les calculs inutiles.

Boîte de dialogue Image avec un fond gris et le texte "Raycast Target" entouré d'un carré rouge.
Désactiver la cible de diffusion si possible.
Éviter les groupes de présentation

Les groupes de présentation se mettent à jour de manière inefficace, il faut donc les utiliser avec parcimonie. Évitez-les complètement si votre contenu n'est pas dynamique et utilisez plutôt des ancres pour les mises en page proportionnelles. Sinon, créez un code personnalisé pour désactiver les composants du groupe de présentation une fois qu'ils ont configuré l'interface utilisateur.

Si vous devez utiliser des groupes de disposition (horizontale, verticale, grille) pour vos éléments dynamiques, évitez de les imbriquer pour améliorer les performances.

Boîte de dialogue du groupe de mise en page avec fond gris et texte blanc.
Les groupes de présentation peuvent réduire les performances, en particulier lorsqu'ils sont imbriqués les uns dans les autres.
Éviter les grandes listes et grilles

Les grandes listes et les grilles sont coûteuses. Si vous devez créer une liste ou une grille de grande taille (par exemple, un écran d'inventaire comportant des centaines d'articles), envisagez de réutiliser un ensemble plus restreint d'éléments d'interface utilisateur plutôt que de créer un élément d'interface utilisateur pour chaque article. Consultez cet exemple de projet GitHub pour le voir à l'œuvre.

Éviter la superposition de nombreux éléments

La superposition de nombreux éléments d'interface utilisateur (par exemple, des cartes empilées dans un jeu de bataille de cartes) crée un effet de surcharge. Personnalisez votre code pour fusionner les éléments superposés au moment de l'exécution en un nombre réduit d'éléments et de lots.

Utiliser plusieurs résolutions et rapports d'aspect

Les appareils mobiles utilisant désormais des résolutions et des tailles d'écran très différentes, créez des versions alternatives de l'interface utilisateur afin d'offrir la meilleure expérience possible sur chaque appareil.

Utilisez le Device Simulator Devices pour prévisualiser l'interface utilisateur sur une large gamme d'appareils pris en charge. Vous pouvez également créer des dispositifs virtuels dans XCode et Android Studio.

Image du simulateur Devices qui présente un arrière-plan de boîte de dialogue grise et une simulation d'un jeu de bateau de course sur un smartphone.
Prévisualisez une variété de formats d'écran à l'aide du Device Simulator Devices.
Lors de l'utilisation d'une interface utilisateur en plein écran, masquer tout le reste

Si votre écran de pause ou de démarrage couvre tout le reste de la scène, désactivez la caméra qui rend la scène 3D. De même, désactivez tous les éléments du canevas d'arrière-plan cachés derrière le canevas supérieur.

Envisagez d'abaisser l'Application.targetFrameRate lors d'une interface utilisateur plein écran, puisque vous ne devriez pas avoir besoin de mettre à jour à 60 fps.

Affecter la caméra aux canevas de l'espace mondial et de l'espace de la caméra

Le fait de laisser le champ Event ou Render Camera vide oblige Unity à remplir Camera.main, ce qui est inutilement coûteux.

Pensez à utiliser Screen Space - Overlay pour votre Canvas RenderMode si possible, car cela ne nécessite pas de caméra.

Image de la boîte de dialogue Espace photographique des toiles avec un arrière-plan grisé et un texte blanc.
Lorsque vous utilisez le mode de rendu Espace mondial, assurez-vous de remplir la caméra de l'événement.
Audio

Bien que l'audio ne soit normalement pas un goulot d'étranglement pour les performances, vous pouvez toujours l'optimiser pour économiser de la mémoire.

Boîte de dialogue de l'inspecteur sur fond gris et texte blanc avec un modulateur vocal orange en bas.
Optimisez les paramètres d'importation de vos clips audio.
Utilisez si possible des fichiers WAV originaux non compressés comme source d'information.

Si vous utilisez un format compressé (tel que MP3 ou Vorbis), Unity le décompressera, puis le recompressera pendant la construction. Il en résulte deux passages avec perte, ce qui dégrade la qualité finale.

Compresser le clip et réduire le débit de compression

Réduisez la taille de vos clips et l'utilisation de la mémoire grâce à la compression :

  • Utilisez Vorbis pour la plupart des sons (ou MP3 pour les sons qui ne sont pas destinés à être mis en boucle).
  • Utilisez l'ADPCM pour les sons courts et fréquemment utilisés (par exemple, bruits de pas, coups de feu). Cela réduit la taille des fichiers par rapport au PCM non compressé, mais le décodage est rapide pendant la lecture.

Sur les appareils mobiles, les effets sonores doivent avoir une fréquence maximale de 22 050 Hz. L'utilisation de paramètres inférieurs n'a généralement qu'un impact minime sur la qualité finale ; utilisez vos propres oreilles pour en juger.

Choisir le type de charge approprié

Le réglage varie en fonction de la taille du clip.

  • Les petits clips (< 200 kb) devraient Décompresser au chargement. La décompression d'un son en données audio PCM 16 bits brutes entraîne des coûts de CPU et de mémoire, et n'est donc souhaitable que pour les sons courts.
  • Les clips de taille moyenne (>= 200 kb) doivent rester compressés en mémoire.
  • Les fichiers volumineux (musique de fond) doivent être réglés sur Streaming, sinon l'intégralité du fichier sera chargée en mémoire en une seule fois.
Décharger les sources audio en sourdine de la mémoire

Lorsque vous mettez en place un bouton de mise en sourdine, ne vous contentez pas de mettre le volume à 0. Vous pouvez détruire le composant AudioSource pour le décharger de la mémoire, à condition que le lecteur n'ait pas besoin de l'activer et de le désactiver très souvent.

Télécharger les conseils complets sur les performances des téléphones portables

Dans le prochain article de blog, nous nous pencherons sur les graphiques et les actifs. Mais si vous souhaitez accéder à la liste complète des conseils et astuces de l'équipe d'aujourd'hui, notre livre électronique complet est disponible ici.

Image de la couverture du livre électronique avec un fond rouge et un graphique d'un jeu d'aventure avec un dragon et les mots "Optimize your mobile game performance" en texte gras blanc.

TÉLÉCHARGER LE LIVRE ÉLECTRONIQUE

Si vous souhaitez en savoir plus sur les services d'assistance intégrée et donner à votre équipe un accès direct aux ingénieurs, aux conseils d'experts et aux meilleures pratiques pour vos projets, consultez les plans de réussite d'Unity ici.

Restez à l'écoute pour d'autres conseils en matière de performance

Nous voulons vous aider à rendre vos applications Unity aussi performantes que possible, alors s'il y a des sujets d'optimisation sur lesquels vous aimeriez en savoir plus, n'hésitez pas à nous en faire part dans les commentaires.