Agent skill
Unity Perf Audit
Audit statique de performance pour projets Unity. Triggers: /perf, /perf-audit, 'audit performance', 'optimiser performance', 'anti-pattern performance', 'frame rate', 'profiler', 'budget fps'. Analyse le code C# du projet pour detecter les anti-patterns de performance (CPU, GPU, memoire). Produit un rapport avec severite, localisation fichier:ligne, et correctifs concrets avant/apres.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/unity-perf-audit
SKILL.md
Unity Perf Audit
Ce que fait cette skill
Analyse statique du code C# d'un projet Unity pour detecter les anti-patterns de performance. Pas besoin d'executer le jeu ni de profiler -- on scanne le code source avec Grep et Glob.
Produit :
- Un inventaire des fichiers C# du projet (compte, taille, fichiers volumineux)
- Un rapport d'anti-patterns detectes avec severite et localisation
- Les 5 correctifs prioritaires avec code avant/apres
Prerequis
- Projet Unity avec des scripts C# dans
Assets/ - Acces en lecture au dossier du projet
- Aucun package, aucun outil externe requis
Arbre de decision
Symptome rapporte ?
|
+-- FPS bas en general --> Lancer le scan complet (etapes 1-5)
+-- Spikes ponctuels / stuttering --> Focus CPU (anti-patterns C1-C12)
+-- Memoire qui grimpe / crashs OOM --> Focus Memory (anti-patterns M1-M7)
+-- Rendu lent, draw calls hauts --> Focus GPU (anti-patterns G1-G5)
+-- Pas de symptome precis (audit preventif) --> Scan complet
Demarrage rapide
- Scanner la structure projet (Glob
**/*.cs) - Detecter les anti-patterns CPU, GPU, memoire (Grep)
- Scorer et categoriser chaque probleme
- Produire le rapport avec fichier:ligne
- Proposer les 5 fixes prioritaires
Guide etape par etape
Etape 1 : Scanner la structure projet
Utiliser Glob pour inventorier tous les fichiers C# du projet.
Glob: Assets/**/*.cs
Analyser :
- Nombre total de fichiers
.cs - Identifier les fichiers > 500 lignes (Read pour compter les lignes ou
wc -l) - Identifier les dossiers avec le plus de scripts (structure du projet)
- Exclure les dossiers
Plugins/,ThirdParty/,TextMesh Pro/de l'analyse (code externe)
Commande Bash pour compter les lignes de tous les fichiers :
find <project>/Assets -name "*.cs" -not -path "*/Plugins/*" -not -path "*/ThirdParty/*" -not -path "*/TextMesh Pro/*" | xargs wc -l | sort -rn | head -20
Produire un resume :
## Structure projet
- **Fichiers C#** : 47
- **Lignes totales** : 12,340
- **Fichiers > 500 lignes** : PlayerManager.cs (623), GameController.cs (891)
- **Dossiers principaux** : Scripts/ (28), UI/ (12), Enemies/ (7)
Etape 2 : Detecter les anti-patterns
Scanner les fichiers C# pour les anti-patterns CPU, GPU et memoire. Voir references/anti-patterns.md pour la table complete des patterns a detecter.
Pour chaque match, noter le fichier, le numero de ligne, et la ligne de code. Executer les recherches Grep sur tous les fichiers .cs du projet (hors exclusions).
Etape 3 : Scorer et categoriser
Attribuer un score par fichier et global :
| Severite | Points | Impact |
|---|---|---|
| Critical | 10 | Cause directe de lag visible (chaque frame) |
| High | 5 | Degradation significative sous charge |
| Medium | 2 | Impact mesurable au profiler |
| Low | 1 | Bonne pratique, impact minimal |
Score global :
- 0-10 : Propre. Pas d'action requise.
- 11-30 : Acceptable. Quelques points a corriger.
- 31-60 : Problematique. Corrections recommandees avant build.
- 61+ : Critique. Corrections obligatoires.
Ne scorer que les problemes reellement trouves dans le code. Ne jamais inventer de problemes hypothetiques.
Etape 4 : Produire le rapport
Format du rapport : tableau avec colonnes #, Probleme, Severite, Fichier:Ligne, Description. Grouper par severite (Critical > High > Medium > Low). Ajouter un resume par severite (nombre + score). Inclure un score global avec le verdict (Propre / Acceptable / Problematique / Critique).
Etape 5 : Proposer les 5 fixes prioritaires
Pour chaque fix, montrer le code avant et apres. Prendre les problemes par ordre de severite (Critical d'abord). Format : titre, severite, ligne, impact, puis code avant/apres.
Patterns de fix courants :
| Anti-pattern | Fix standard |
|---|---|
| GetComponent dans Update | Cache dans Awake avec champ prive |
| Find en runtime | Cache dans Awake ou injecter via SerializeField |
| Camera.main dans Update | private Camera _cam; void Awake() => _cam = Camera.main; |
| String concat dans Update | StringBuilder ou string.Format ou supprimer le log |
| Instantiate dans Update | Object pooling (Queue + activation/desactivation) |
| foreach dans Update | Boucle for avec List<T> |
| SendMessage | Interface directe ou event C# |
| .tag == | .CompareTag("name") |
| new WaitForSeconds repete | Cache static readonly WaitForSeconds |
| Event sans unsubscribe | Ajouter -= dans OnDisable() ou OnDestroy() |
| Resources.Load sans Unload | Ajouter Resources.UnloadUnusedAssets() apres usage ou passer a Addressables |
Regles strictes
TOUJOURS :
- Reporter uniquement les problemes trouves dans le code reel (pas d'hypotheses)
- Indiquer le fichier et le numero de ligne exact pour chaque probleme
- Fournir un correctif concret avec code avant/apres
- Prioriser par impact (Critical en premier)
- Exclure le code tiers (Plugins/, ThirdParty/, TextMesh Pro/)
- Verifier le contexte : un
GetComponentdansStart()est acceptable, dansUpdate()non
JAMAIS :
- Suggerer d'optimiser du code qui ne s'execute qu'une fois (Start, Awake, OnEnable initial, loading screens)
- Inventer des problemes non presents dans le code
- Recommander des refactors massifs (on corrige les hot paths, pas l'architecture)
- Suggerer des outils externes ou packages payants
- Reporter un
foreachsur une collection fixe hors hot path comme un probleme - Ignorer les faux positifs : verifier que le pattern est bien dans le contexte problematique avant de le reporter
Skills connexes
- Diagnostiquer un bug de performance specifique (crash, freeze ponctuel) ? Utiliser
/unity-debug(Unity Debug) - Appliquer les corrections detectees avec refactoring structure ? Utiliser
/unity-refactor(Unity Refactor) - Tester apres correction ? Utiliser
/unity-test(Unity Test)
Troubleshooting
| Probleme | Solution |
|---|---|
| Trop de faux positifs GetComponent | Verifier la methode englobante. GetComponent dans Awake/Start/OnEnable n'est pas un probleme. Utiliser -B 20 dans Grep pour voir le contexte. |
| Pattern detecte dans un commentaire | Filtrer les lignes qui commencent par // ou sont dans un bloc /* */. Lire le fichier pour confirmer. |
| Fichier trop gros pour analyser | Lire par sections avec offset/limit. Se concentrer sur les methodes Update, FixedUpdate, LateUpdate. |
| Le projet n'a pas de dossier Assets/ | Verifier le path du projet. Demander a l'utilisateur de confirmer la racine du projet Unity. |
| Score tres eleve sur un prototype | Contextualiser : un prototype n'a pas besoin d'optimisation poussee. Mentionner les problemes mais reduire l'urgence. |
| Anti-pattern dans du code desactive | Verifier s'il y a #if / [System.Obsolete] / commentaire indiquant du code mort. Ne pas reporter le code mort. |
| Pas de fichiers .cs trouves | Le projet est peut-etre vide ou les scripts sont dans un package. Verifier avec Glob **/*.cs sans filtre de dossier. |
| Event leak faux positif | Verifier les patterns : si += est dans OnEnable et -= est dans OnDisable, c'est correct. Verifier aussi les lambdas anonymes (impossible a unsubscribe). |
Table complete des anti-patterns : voir references/anti-patterns.md
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?