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

THOMAS KROGH-JACOBSEN / UNITY TECHNOLOGIESSenior Technical Content Marketing Manager
Jul 13, 2021|13 Min
Optimisez les performances de vos jeux mobiles : Obtenez des conseils d'experts sur les paramètres de physique, d'interface utilisateur et d'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 de succès intégré soutient les clients de Unity avec leurs problèmes techniques complexes. Nous nous sommes assis avec cette équipe d'ingénieurs logiciels seniors et leur avons demandé de partager une partie de leur expertise sur l'optimisation des jeux mobiles.

Notre équipe Unity Studio Productions connaît le code source sur le bout des doigts et travaille avec une pléthore de clients Unity pour les aider à tirer le meilleur parti du moteur. Dans leur travail, ils plongent profondément dans les projets des créateurs pour aider à identifier les points où la performance pourrait être optimisée pour une plus grande vitesse, stabilité et efficacité.

Alors que nos ingénieurs commençaient à partager leurs idées sur l'optimisation des jeux mobiles, nous avons rapidement réalisé qu'il y avait beaucoup trop d'excellentes informations pour le seul article de blog que nous avions prévu. Au lieu de cela, nous avons décidé de transformer leur montagne de connaissances en un e-book complet (que vous pouvez télécharger ici), ainsi qu'une série d'articles de blog qui mettent en lumière certains de ces 75+ conseils pratiques.

Dans cette deuxième partie de cette série, nous nous concentrons 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 article précédent sur le profilage, la mémoire et l'architecture du code – et restez à l'écoute pour notre prochain, dédié aux actifs, à la configuration du projet et aux graphiques.

Vous le voulez tout de suite ? Téléchargez le e-book gratuit.

Entrons directement dans le vif du sujet !

Physique

La physique intégrée de 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, vérifiez Pré-cuire les maillages de collision chaque fois que cela est possible.

Image de la boîte des paramètres du joueur avec un fond gris foncé et le texte "pré-cuire les maillages de collision*" coché et entouré de rouge
Activez les maillages de collision pré-cuits.

Assurez-vous de modifier vos paramètres de physique (Paramètres du projet > Physique) et simplifiez votre matrice de collision des couches chaque fois que cela est possible.

Désactivez Synchronisation automatique des transformations et activez Réutiliser les rappels de collision.

Image de la boîte des paramètres du projet avec un fond gris et les sections pour "Synchronisation automatique des transformations" et "Matrice de collision des couches" entourées de rouge.
Modifiez les paramètres de physique du projet pour augmenter les performances.
Image du module physique du profileur avec la section de 5 ms montrant l'activité en vert, bleu et orange sur un fond noir.
Surveillez le module physique du profileur pour détecter les problèmes de performance.
Simplifier les colliders

Les colliders de maillage peuvent être coûteux. Substituez des colliders de maillage plus complexes par des colliders de maillage primitifs ou simplifiés pour approcher la forme originale.

Utilisez des primitives ou des maillages simplifiés pour les colliders.
Utilisez des primitives ou des maillages simplifiés pour les colliders.
Déplacez un Rigidbody en utilisant des méthodes physiques

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

Fixez le pas de temps fixe

Le Fixed Timestep par défaut dans les paramètres du projet est de 0,02 (50 Hz). Changez cela pour correspondre à votre fréquence d'images cible (par exemple, 0,03 pour 30 fps).

Cependant, si votre fréquence d'images chute à l'exécution, cela signifie qu'Unity appellerait FixedUpdate plusieurs fois par image et pourrait potentiellement créer un problème de performance CPU avec un contenu lourd en physique.

Le Maximum Allowed Timestep limite le temps que les calculs physiques et les événements FixedUpdate peuvent utiliser en cas de chute de la fréquence d'images. Abaisser cette valeur signifie que pendant un accroc de performance, la physique et l'animation pourraient ralentir, tout en réduisant également leur impact sur la fréquence d'images.

Image du module de temps fixe dans les paramètres du projet avec un fond gris et un texte blanc.
Modifiez le pas de temps fixe pour correspondre à votre fréquence d'images cible, et abaissez le pas de temps maximum autorisé pour réduire les problèmes de performance.
Visualisez avec le débogueur physique

Utilisez la fenêtre de débogage physique (Window > Analysis > Physics Debugger) pour aider à résoudre tout problème de colliders ou de divergences. Cela montre un indicateur codé par 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 dans la boîte de dialogue du débogueur physique.
L'outil de débogage physique vous aide à visualiser comment vos objets physiques peuvent interagir les uns avec les autres.

Pour plus d'informations, voir Visualisation de débogage physique dans la documentation Unity.

Interface utilisateur

Unity UI (UGUI) peut souvent être une source de problèmes de performance. Le composant Canvas génère et met à jour des maillages pour les éléments de l'UI et émet des appels de dessin vers le GPU. Son fonctionnement peut être coûteux, alors gardez à l'esprit les facteurs suivants lorsque vous travaillez avec UGUI.

Divisez vos Canvases

Si vous avez un grand Canvas avec des milliers d'éléments, la mise à jour d'un seul élément de l'UI force la mise à jour de tout le Canvas, ce qui peut potentiellement générer un pic de CPU.

Profitez de la capacité d'UGUI à prendre en charge plusieurs Canvases. Divisez les éléments de l'UI en fonction de la fréquence à laquelle ils doivent être actualisés. Gardez les éléments de l'UI statiques sur un Canvas séparé, et les éléments dynamiques qui se mettent à jour en même temps sur de plus petits sous-canvases.

Assurez-vous que tous les éléments de l'UI dans chaque Canvas ont la même valeur Z, matériaux et textures.

Cachez les éléments de l'UI invisibles

Vous pourriez avoir des éléments de l'UI 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 votre élément de l'UI invisible est actif, il pourrait encore utiliser des appels de dessin. Désactivez explicitement tous les composants de l'UI invisibles et réactivez-les si nécessaire.

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

Limitez les GraphicRaycasters et désactivez la cible de Raycast.

Les événements d'entrée comme les touches ou les clics à l'écran nécessitent le composant GraphicRaycaster. Cela parcourt simplement chaque point d'entrée à l'écran et vérifie s'il se trouve dans le RectTransform d'une interface utilisateur.

Supprimez 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 du raycaster graphique gris avec du texte blanc.
Désactivez Ignorer les graphiques inversés, qui est actif par défaut.

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

Boîte de dialogue d'image avec un fond gris et le texte "Raycast Target" entouré d'un carré rouge.
Désactivez Raycast Target si possible.
Évitez les groupes de mise en page

Les groupes de mise en page se mettent à jour de manière inefficace, donc utilisez-les avec parcimonie. Évitez-les complètement si votre contenu n'est pas dynamique, et utilisez des ancres pour des mises en page proportionnelles à la place. Sinon, créez un code personnalisé pour désactiver les composants Layout Group après avoir configuré l'interface utilisateur.

Si vous devez utiliser des groupes de mise en page (Horizontal, Vertical, Grid) pour vos éléments dynamiques, évitez de les imbriquer pour améliorer les performances.

Boîte de dialogue du groupe de mise en page de grille avec un fond gris et du texte blanc.
Les groupes de mise en page peuvent réduire les performances, surtout lorsqu'ils sont imbriqués.
Évitez les grandes vues de liste et de grille

Les grandes vues de liste et de grille sont coûteuses. Si vous devez créer une grande vue de liste ou de grille (par exemple, un écran d'inventaire avec des centaines d'articles), envisagez de réutiliser un petit pool d'éléments d'interface utilisateur plutôt que de créer un élément d'interface utilisateur pour chaque article. Découvrez cet exemple de projet GitHub pour voir cela en action.

Évitez de nombreux éléments superposés

Superposer de nombreux éléments d'interface utilisateur (par exemple, des cartes empilées dans un jeu de cartes) crée un surdessin. Personnalisez votre code pour fusionner les éléments superposés à l'exécution en moins d'éléments et de lots.

Utilisez plusieurs résolutions et rapports d'aspect

Avec 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'UI pour offrir la meilleure expérience sur chaque appareil.

Utilisez le Simulateur de périphérique pour prévisualiser l'UI sur une large gamme de périphériques pris en charge. Vous pouvez également créer des appareils virtuels dans XCode et Android Studio.

Image du simulateur de périphérique avec un fond de boîte de dialogue gris et une simulation d'un jeu de bateau de course sur un smartphone.
Prévisualisez une variété de formats d'écran en utilisant le Simulateur de périphérique.
Lors de l'utilisation d'une interface utilisateur en plein écran, cachez 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 tout élément Canvas d'arrière-plan caché derrière le Canvas supérieur.

Envisagez de réduire le Application.targetFrameRate pendant une interface utilisateur en plein écran, car vous ne devriez pas avoir besoin de mettre à jour à 60 fps.

Assignez la caméra aux Canvases en espace monde et en espace caméra

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

Envisagez d'utiliser Screen Space – Overlay pour votre RenderMode Canvas si possible, car cela ne nécessite pas de caméra.

Image de la boîte de dialogue des canvases en espace caméra avec un fond grisé et du texte blanc.
Lors de l'utilisation du mode de rendu en espace monde, assurez-vous de remplir la caméra d'événements.
Audio

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

Boîte de dialogue de l'inspecteur avec un fond gris et un texte blanc avec un modulateur de voix orange en bas.
Optimisez les paramètres d'importation de vos AudioClips.
Utilisez des fichiers WAV originaux non compressés comme vos ressources sources lorsque cela est possible.

Si vous utilisez un format compressé (comme MP3 ou Vorbis), Unity le décompressera, puis le recomprimera pendant le temps de construction. Cela entraîne deux passes avec perte, dégradant la qualité finale.

Compressez le clip et réduisez le débit binaire de compression.

Réduisez la taille de vos clips et l'utilisation de la mémoire avec la compression :

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

Les effets sonores sur les appareils mobiles doivent être au maximum à 22 050 Hz. Utiliser des paramètres plus bas a généralement un impact minimal sur la qualité finale ; utilisez vos propres oreilles pour juger.

Choisissez le type de chargement approprié.

Le paramètre varie en fonction de la taille du clip.

  • Les petits clips (< 200 ko) doivent se décompresser au chargement. Cela entraîne un coût CPU et mémoire en décompressant un son en données audio PCM brutes 16 bits, donc c'est seulement souhaitable pour les sons courts.
  • Les clips moyens (>= 200 ko) doivent rester compressés en mémoire.
  • Les gros fichiers (musique de fond) doivent être réglés sur Streaming, sinon l'ensemble de l'actif sera chargé en mémoire d'un coup.
Déchargez les AudioSources muets de la mémoire.

Lors de la mise en œuvre d'un bouton de sourdine, ne vous contentez pas de régler le volume à 0. Vous pouvez Détruire le composant AudioSource pour le décharger de la mémoire, à condition que le joueur n'ait pas besoin de l'activer et de le désactiver très souvent.

Téléchargez les conseils complets sur les performances mobiles

Dans le prochain article de blog, nous plongerons directement dans les graphiques et les actifs. Mais si vous souhaitez accéder à la liste complète des conseils et astuces de l'équipe aujourd'hui, notre e-book complet est disponible ici.

Image de la couverture de l'ebook avec un fond rouge et un graphique d'un jeu d'aventure avec un dragon et les mots "Optimisez les performances de vos jeux mobiles" en texte blanc en gras.

TÉLÉCHARGER L'E-BOOK

Si vous êtes intéressé à en savoir plus sur les services de support intégré et souhaitez donner à votre équipe un accès direct aux ingénieurs, des conseils d'experts et des recommandations de bonnes pratiques pour vos projets, alors consultez les plans de succès de Unity ici.

Restez à l'écoute pour plus de conseils sur les performances

Nous voulons vous aider à rendre vos applications Unity aussi performantes que possible, donc s'il y a des sujets d'optimisation que vous aimeriez connaître davantage, veuillez nous tenir informés dans les commentaires.