Description du tutoriel
Dans ce tutoriel, nous allons apprendre à étendre l’éditeur d’Unity3d. Grace à cette possibilité, nous pouvons réaliser des inspecteurs personnalisés pour faciliter nos tests lors des développements.
Nous verrons comment faire varier une valeur d’un ScriptableObject ajouté à un objet de notre jeu.
Le code source est disponible à la fin du tutoriel.
Création d’un ScriptableObject stockant des données
Pour commencer je vais créer un ScriptableObject Stats pour y stocker différentes données du joueur.
using UnityEngine;
[CreateAssetMenu(fileName ="Stats", menuName ="RPG Statistiques/Créer des statistiques")]
public class Stats : ScriptableObject
{
public float hp;
public float mp;
public float strength;
}
J’explique un peu plus le fonctionnement des ScriptableObject dans le tutoriel sur la création d’un inventaire.
Cela nous permets de créer des stats pour notre personnage en faisant clic droit > Create > RPG Statistiques > Créer des statistiques.

Création d’un script pour notre joueur
Créez deux TextMesh dans l’objet de votre joueur et appelé un HP et un autre MP. Ils permettrons de visualiser les valeurs du joueur.
Ensuite nous allons créer un script Player.
using UnityEngine;
public class Player : MonoBehaviour
{
public Stats stats;
public TextMesh hpText;
public TextMesh mpText;
void Update()
{
hpText.text = stats.hp.ToString();
mpText.text = stats.mp.ToString();
}
}
Ce script ne fait rien d’exceptionnel, il actualise le contenu des TextMesh en fonction des valeurs des HP et MP du joueur.
Ajoutez le à votre joueur, faite glisser les TextMesh correspondant.
Maintenant nous allons attaquer la partie qui nous intéresse, le script pour notre éditeur personnalisé.
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Player))]
public class PlayerEditor : Editor
{
void OnEnable()
{
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
Player player = (Player)target;
Stats stats = player.stats;
GUILayout.Label("HP");
stats.hp = EditorGUILayout.Slider(stats.hp, 0f, 9999f);
GUILayout.Label("MP");
stats.mp = EditorGUILayout.Slider(stats.mp, 0f, 999f);
}
}
CustomEditor permets d’informer que nous appliquons notre éditeur personnalisé uniquement aux gameobject de ayant une classe Player.
Il faut que le script ait le même nom avec Editor à la fin.
base.OnInspectorGUI() récupère l’affichage par défaut du script.
Player player = (Player)target; récupère les données du script sur un objet donné.
(Player) converti target en Player pour avoir accès à ses méthodes et attributs.
GUILayout.Label(« HP »); affiche un libellé.
stats.hp = EditorGUILayout.Slider(stats.hp, 0f, 9999f); stats.hp récupère la valeur du slider que nous avons créé qui varie entre 0 et 9999.
Vous devriez avoir une interface de ce genre :

Et quand vous faite varier les valeurs, celles-ci sont actualisées dans les TextMesh.

Conclusion
Voici clairement un des points forts d’Unity 3D, la possibilité de personnaliser des interfaces du moteur de jeu.
Les possibilités sont infinies pour vous faciliter la vie et je trouve que c’est assez accessible.