ENOSI Studio

Lorsqu’on développe un jeu sous Unity, il est fréquent d’avoir des champs publics ou [SerializeField] nécessitant une assignation manuelle dans l’inspecteur. Cela peut devenir fastidieux, surtout quand on travaille sur des scènes avec de nombreux objets.

Ma solution ? Un attribut personnalisé [AutoAssign] qui permet d’assigner automatiquement une référence dans l’éditeur.

L’attribut [AutoAssign] apporte plusieurs avantages :

  • Gagner du temps : plus besoin de glisser-déposer chaque référence manuellement.
  • Réduire les erreurs : évite les références null qui peuvent causer des bugs.
  • Faciliter la maintenance : les assignations se font de manière prévisible et systématique.

Prérequis

  • Odin Inspector

1. Création de la Classe Attribute

using System;

[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
public class AutoAssignAttribute : Attribute
{

}

2. Création de la Classe AttributeDrawer

#if UNITY_EDITOR
using Sirenix.OdinInspector.Editor;
using UnityEngine;

public class AutoAssignAttributeDrawer<T> : OdinAttributeDrawer<AutoAssignAttribute, T> where T : Component
{
    protected override void DrawPropertyLayout(GUIContent label)
    {
        // Si le bouton est null, essaie de l'assigner automatiquement
        if (this.ValueEntry.SmartValue == null)
        {
            var component = this.Property.ParentValues[0] as MonoBehaviour;
            if (component != null)
            {
                this.ValueEntry.SmartValue = component.GetComponent<T>();
                Debug.Log($"Auto-assigned {typeof(T).Name} to {this.Property.Name}");
            }
            else Debug.LogWarning($"No {typeof(T).Name} found on {component.name} to auto-assign to {this.Property.Name}");
        }

        // Dessine le champ normalement
        this.CallNextDrawer(label);
    }
}
#endif

3. Mise en place de [AutoAssign]

Exemple d’utilisation de l’attribut dans un script Unity :

[RequireComponent(typeof(Rigidbody))]
public class Example : MonoBehaviour 
{
    [AutoAssign] 
    public Rigidbody rb;
}

Comment fonctionne [AutoAssign] ?

L’attribut fonctionne en vérifiant si le champ a déjà une référence. S’il est vide, il cherche automatiquement un composant du même type sur le GameObject et l’assigne.

Il repose sur un PropertyDrawer personnalisé via Odin Inspector, qui intercepte l’affichage du champ dans l’éditeur et applique l’assignation si nécessaire.

[AutoAssign] peut être utilisé sur plusieurs types de champs :

  • Composants Unity (Rigidbody, Collider, AudioSource…)
  • Scripts personnalisés dérivés de MonoBehaviour
  • Autres objets Unity comme Transform

On peut aussi étendre son comportement pour rechercher dans les parents ou enfants du GameObject, selon les besoins du projet.

Conclusion

[AutoAssign], permet de faire des assignations par références rapide tout en réduisant le risque d’erreur.

Si tu veux tester cette solution, n’hésite pas à l’intégrer dans ton projet et à l’adapter à tes besoins !


Quoi d’autre ?

ENOSI Studio

Cette article fera peut-être l’object de mise à jour.

– MARTIN B.