Skip to content
Unity Editor Tools logo

Unity Editor Tools

Cree des outils custom pour l'editeur Unity : inspectors personnalises, fenetres d'outils, drawers, menu items, wizards et asset processors. Triggers: /unity-editor-tools, /editor, 'custom inspector', 'editor window', 'property drawer', 'menu item', 'editor tool', 'outil editeur'. Produit des scr...

SKILL.md

Full skill instructions

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

  1. Identifier le workflow a accelerer dans l'editeur
  2. Choisir le type d'outil via l'arbre de decision
  3. Verifier la structure assembly Editor
  4. Generer le script avec le template adapte
  5. Verifier visuellement dans Unity

Arbre de decision

Quel type d'outil editor creer ?

BesoinTypeClasse de base
Personnaliser l'affichage d'un composant dans l'InspectorCustomEditorEditor
Personnaliser le rendu d'un type de champ specifiquePropertyDrawerPropertyDrawer
Creer une fenetre d'outil autonomeEditorWindowEditorWindow
Ajouter une action rapide dans un menuMenuItemattribut statique
Creer un assistant etape par etapeScriptableWizardScriptableWizard
Traiter les assets a l'importAssetPostprocessorAssetPostprocessor

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 :

TemplateBase classUsage
CustomEditor (IMGUI)EditorInspector personnalise, compatible toutes versions
CustomEditor (UI Toolkit)EditorInspector complexe Unity 6+, binding auto
PropertyDrawerPropertyDrawerRendu custom d'un type de champ
EditorWindowEditorWindowFenetre d'outil avec tabs et toolbar
MenuItemAttribut statiqueAction 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 :

  1. Verifier que le fichier est dans le bon dossier (Assets/​Scripts/​Editor/ ou Assets/​Editor/)
  2. Verifier l'absence d'erreurs de compilation : chercher les dependances manquantes
  3. S'assurer que le using UnityEditor; est present
  4. Confirmer que le script ne reference aucun type Editor depuis un assembly Runtime

Regles strictes

  • TOUJOURS placer les scripts editor dans Assets/​Scripts/​Editor/ ou Assets/​Editor/
  • TOUJOURS utiliser un assembly definition Game.Editor avec includePlatforms: ["Editor"]
  • TOUJOURS utiliser serializedObject.Update() et ApplyModifiedProperties() dans les CustomEditor
  • TOUJOURS utiliser Undo.RecordObject() avant de modifier un objet via bouton
  • TOUJOURS utiliser EditorGUI.BeginProperty/​EndProperty dans les PropertyDrawer
  • JAMAIS referencer du code Editor depuis un assembly Runtime
  • JAMAIS utiliser target sans cast dans un CustomEditor (utiliser (T)target ou serializedObject)
  • JAMAIS oublier le GUIContent.none quand 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

ProblemeSolution
The type or namespace 'Editor' could not be foundLe script n'est pas dans un dossier Editor ou l'assembly def manque includePlatforms: ["Editor"]
L'inspector custom ne s'affiche pasVerifier que typeof(TargetComponent) correspond exactement au type cible et que le script compile
NullReferenceException dans OnEnableLe nom de propriete dans FindProperty() ne correspond pas au champ [SerializeField] (sensible a la casse)
Le PropertyDrawer ne s'applique pasVerifier que l'attribut [CustomPropertyDrawer(typeof(T))] cible le bon type, pas le champ
Multiple editors warningDeux CustomEditor ciblent le meme type. Grep pour CustomEditor(typeof(X)) dans tout le projet
Le MenuItem est griseLa methode Validate retourne false. Verifier les conditions de validation
Changements non annulables (Ctrl+Z)Ajouter Undo.RecordObject() avant chaque modification directe