Unity Editor Tools
Ce que fait cette skill
Cette skill genere des outils personnalises pour l'editeur Unity afin d'accelerer les workflows de developpement. Elle couvre tous les types d'extensions editor : CustomEditor, PropertyDrawer, EditorWindow, MenuItem, ScriptableWizard et AssetPostprocessor.
Prerequis
- Projet Unity avec une structure
Assets/Scripts/existante - Connaissance du composant ou du workflow a outiller
- Pas de dependance MCP Unity : utilise uniquement Read, Write, Edit, Grep, Glob, Bash
Demarrage rapide
- Identifier le workflow a accelerer dans l'editeur
- Choisir le type d'outil via l'arbre de decision
- Verifier la structure assembly Editor
- Generer le script avec le template adapte
- Verifier visuellement dans Unity
Arbre de decision
Quel type d'outil editor creer ?
| Besoin | Type | Classe de base |
|---|---|---|
| Personnaliser l'affichage d'un composant dans l'Inspector | CustomEditor |
Editor |
| Personnaliser le rendu d'un type de champ specifique | PropertyDrawer |
PropertyDrawer |
| Creer une fenetre d'outil autonome | EditorWindow |
EditorWindow |
| Ajouter une action rapide dans un menu | MenuItem |
attribut statique |
| Creer un assistant etape par etape | ScriptableWizard |
ScriptableWizard |
| Traiter les assets a l'import | AssetPostprocessor |
AssetPostprocessor |
Guide etape par etape
Etape 1 : Identifier le workflow a accelerer
Analyser le besoin utilisateur. Scanner les composants existants :
Glob : Assets/Scripts/**/*.cs
Grep : "class.*MonoBehaviour" dans les fichiers trouves
Questions cles : quel composant editer plus facilement ? Quelle action automatiser ? Quel feedback visuel manque ?
Etape 2 : Verifier la structure assembly Editor
Avant de generer du code, verifier que l'infrastructure Editor existe :
1. Glob : Assets/**/Editor/*.asmdef OR Assets/**/Editor.asmdef
2. Si absent : creer le dossier Assets/Scripts/Editor/
3. Creer Game.Editor.asmdef avec reference a Game.Runtime
4. Verifier que le .asmdef cible uniquement la plateforme Editor
Structure du fichier Game.Editor.asmdef :
{
"name": "Game.Editor",
"rootNamespace": "",
"references": ["Game.Runtime"],
"includePlatforms": ["Editor"],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false
}
Si aucun Game.Runtime.asmdef n'existe, verifier avec Glob dans Assets/Scripts/ et en creer un si necessaire.
Etape 3 : Generer le script editor
Templates disponibles dans references/editor-templates.md :
| Template | Base class | Usage |
|---|---|---|
| CustomEditor (IMGUI) | Editor |
Inspector personnalise, compatible toutes versions |
| CustomEditor (UI Toolkit) | Editor |
Inspector complexe Unity 6+, binding auto |
| PropertyDrawer | PropertyDrawer |
Rendu custom d'un type de champ |
| EditorWindow | EditorWindow |
Fenetre d'outil avec tabs et toolbar |
| MenuItem | Attribut statique | Action rapide dans un menu Unity |
Pour Unity 6+, preferer UI Toolkit a IMGUI pour les EditorWindow et CustomEditor complexes. IMGUI reste acceptable pour les PropertyDrawer simples.
Etape 4 : Verification visuelle
Apres generation du script :
- Verifier que le fichier est dans le bon dossier (
Assets/Scripts/Editor/ouAssets/Editor/) - Verifier l'absence d'erreurs de compilation : chercher les dependances manquantes
- S'assurer que le
using UnityEditor;est present - Confirmer que le script ne reference aucun type Editor depuis un assembly Runtime
Regles strictes
- TOUJOURS placer les scripts editor dans
Assets/Scripts/Editor/ouAssets/Editor/ - TOUJOURS utiliser un assembly definition
Game.EditoravecincludePlatforms: ["Editor"] - TOUJOURS utiliser
serializedObject.Update()etApplyModifiedProperties()dans les CustomEditor - TOUJOURS utiliser
Undo.RecordObject()avant de modifier un objet via bouton - TOUJOURS utiliser
EditorGUI.BeginProperty/EndPropertydans les PropertyDrawer - JAMAIS referencer du code Editor depuis un assembly Runtime
- JAMAIS utiliser
targetsans cast dans un CustomEditor (utiliser(T)targetouserializedObject) - JAMAIS oublier le
GUIContent.nonequand on dessine des sous-champs dans un Drawer - JAMAIS creer de fichier editor a la racine de
Assets/Scripts/
Skills connexes
- Generer le composant avant de creer son inspector ? Utiliser
/unity-code-gen(Unity Code Gen) - Creer une UI runtime (pas editor) ? Utiliser
/uitk(Unity UI Toolkit) - Tester les outils editor ? Utiliser
/unity-test(Unity Test)
Troubleshooting
| Probleme | Solution |
|---|---|
The type or namespace 'Editor' could not be found |
Le script n'est pas dans un dossier Editor ou l'assembly def manque includePlatforms: ["Editor"] |
| L'inspector custom ne s'affiche pas | Verifier que typeof(TargetComponent) correspond exactement au type cible et que le script compile |
NullReferenceException dans OnEnable |
Le nom de propriete dans FindProperty() ne correspond pas au champ [SerializeField] (sensible a la casse) |
| Le PropertyDrawer ne s'applique pas | Verifier que l'attribut [CustomPropertyDrawer(typeof(T))] cible le bon type, pas le champ |
Multiple editors warning |
Deux CustomEditor ciblent le meme type. Grep pour CustomEditor(typeof(X)) dans tout le projet |
| Le MenuItem est grise | La methode Validate retourne false. Verifier les conditions de validation |
| Changements non annulables (Ctrl+Z) | Ajouter Undo.RecordObject() avant chaque modification directe |