Comment créer facilement des menus personnalisés dans Unity 3D

  • 2
  • 22
  •  
  •  
  •  
  •  
  •  
  •  
    24
    Partages

Est-ce que vous vous êtes déjà demandé quelle était la recette secrète pour devenir efficace et ne plus perdre de temps sur Unity 3D ?

Vous savez, cette sensation de vous démener sans avoir des résultats à la hauteur de votre investissement. Et surtout de ne pas comprendre pourquoi alors que d’autres y arrivent !

Lorsque vous construisez votre propre jeu vidéo (ou application) avec Unity 3D, vous avez des besoins très spécifiques. Or, l’éditeur est prévu pour être utilisé par tout le monde, dans des cas d’utilisation très variés.

On est loin du spécifique dont vous avez besoin.

Le vrai problème

C’est là que se cache l’un des grands ennemis du créateur de contenus vidéo-ludique. Invisible mais pourtant bien là : c’est cette friction dans votre processus de création.

Dans le meilleur des cas, elle va vous ralentir. Dans le pire des cas, elle va vous mener à l’abandon de votre projet bien aimé.

La majorité des créateurs ne se rendent même pas compte de cette friction. Encore moins de l’importance qu’elle peut avoir sur la réalisation de leurs projets.

Mais elle est pourtant bien là, à vous emmerder tous les jours.

Ne perdez pas de temps, téléchargez tout de suite la liste des 63 attributs à utiliser dans Unity pour customiser votre environnement :
Télécharger la Méga Liste des 63 attributs Unity 3D

La solution est sous vos yeux

Il existe bien heureusement des moyens de réduire cette friction. L’une des grandes forces d’Unity 3D est qu’il est extensible.

De nombreux outils sont accessibles pour vous permettre de créer tout ce sont vous pourriez avoir besoin, directement dans l’éditeur :

  • des inspecteurs personnalisés
  • Des fenêtres volantes avec vos propres formulaires et outils
  • Des Gizmos pour mieux visualiser le contenu de votre scène
  • Des menus personnalisés
  • … et bien d’autres choses encore

Dans cet article, nous allons nous focaliser sur la création de menus personnalisés. Vous verrez qu’il est possible d’en ajouter un peu partout !

Dans chaque cas nous verrons dans quels contextes les utiliser et ce qu’ils peuvent vous apporter.

Les Attributs

La personnalisation des menus passe par l’ajout d’Attributs. Ce n’est pas une spécificité d’Unity 3D mais une fonctionnalité du langage C# : voir la documentation Microsoft.

Nous allons donc voir ensemble quels Attributs utiliser pour obtenir le résultat attendu. Chacun des points suivants est basé sur le même principe : créer un point d’accroche dans l’éditeur pour exécuter du code que vous aurez écrit.

Menus personnalisés dans le menu principal

Commençons par le plus général : ajouter une entrée dans le menu principal de l’éditeur. Le menu principal, c’est la barre en haut que voici :

Menu principal d'Unity 3D

Si votre projet est entièrement vide, vous pouvez déjà constater qu’il y a un menu de plus sur cette image : « Mobile Input ». Il est ajouté par le module d’Assets Standards, et c’est exactement la même chose que nous allons faire !

Dans le cas d’une extension du menu principal (comme d’un menu de préférences plus bas), c’est une configuration globale propre à l’éditeur que nous allons écrire. Dans ce cadre, les scripts de définition doivent être placés dans un répertoire spécial « Editor » afin d’être pris en compte :

Répertoire spécial Editor

 

Créez donc un nouveau script MyCustomMenus dans le répertoire « Editor ». Unity vous prépare un script correspondant à un MonoBehaviour mais ce n’est pas ce qui nous intéresse. Modifiez le script comme suit :

using UnityEngine;

public class MyCustomMenus
{

}

Plus de référence à MonoBehaviour, c’est une simple classe. Dans cette classe, vous allez définir vos points d’entrée pour le menu principal. Il n’y a pas besoin d’étendre une classe particulière puisque nous allons utiliser des Attributs.

Ajoutez une méthode statique à cette classe comme suit :

[MenuItem("Mon Menu/Dire bonjour")]
public static void SayHello()
{
    Debug.Log("Hello ! :)");
}

Notez que l’attribut MenuItem est dans le namespace UnityEditor, il vous faudra donc l’importer. En utilisant cet Attribut, vous allez définir à la volée une entrée de menu pour l’éditeur.

Le mot clé staticest indispensable car ce code sera appelé sans contexte « objet » par l’éditeur. Le nom du MenuItem correspond à l’arborescence de menus séparée par des slashs. Dans notre cas, l’éditeur va générer un menu « Mon Menu » qui aura un enfant « Dire Bonjour » :

Exemple de menus personnalisés

En cliquant sur ce menu, le code écrit dans la méthode sera appelé pour effectuer le traitement qu’on veut. Ici, la console nous dit bonjour :

Vous pouvez créer l’arborescence que vous voulez avec ce principe, y compris ajouter des entrées dans des menus existants :

Autre exemple de menus personnalisés

Dans quels contextes l’utiliser :

  • Pour créer des GameObjects particuliers
  • Pour exécuter des traitements sur la scène
  • Pour ouvrir des fenêtres

Menus personnalisés sur un composant

Il est possible de créer un menu personnalisé associé à un composant. Dans ce cadre, le menu sera contextuel. Vous pourrez donc effectuer des traitements sur ce composant via un menu de ce type.

Il vous vous faut d’abord un MonoBehaviour. Attention de ne pas le mettre dans le répertoire « Editor » ! Si vous placez des MonoBehaviours dans ce répertoire vous aurez des soucis lors de la compilation.

Dans le meilleure des cas, le moteur vous enverra sur les roses en indiquant qu’il manque des classes, dans le pire des cas il ne dira rien et vos comportements ne seront pas exécutés !

public class MyComponent : MonoBehaviour
{
    [ContextMenu("Se présenter")]
    private void SayMyName()
    {
        Debug.Log("Coucou, je suis un composant de " + gameObject.name);
    }
}

Ici, pas de mot clé static car la méthode sera appelée dans le contexte du composant. Vous pouvez donc accéder à tous les éléments de ce dernier : son GameObject, son Transform, les autres composants sur le GameObject et ainsi de suite.

Visuellement, l’entrée est ajoutée sur le menu de gestion du composant sous la roue crantée ici :

Exemple de menus personnalisés sur un composant

Dans quel contexte l’utiliser :

  • Pour effectuer des traitements sur un composant précis

Menus personnalisés dans les Préférences

Pour créer un menu personnalisé dans les préférences, le fonctionnement est très proche de celui pour créer une entrée dans le menu principal. On est de nouveau dans un cadre sans contexte, donc il nous faut une méthode statique, sur un script dans le répertoire « Editor » :

[PreferenceItem("Mes préférences Custom")]
public static void MyCustomPreferences()
{
    GUILayout.Button("test");
}

Cette extention vous fait apparaître un onglet supplémentaire dans la fenêtre de Préférences :

Onglet supplémentaire dans les préférences

Dans cette méthode, vous pouvez construire votre interface de la même manière que pour un inspecteur personnalisé ou une fenêtre personnalisée.

Dans quel contexte l’utiliser :

  • Pour paramétrer un outil que vous aurez créé dans Unity 3D

Extension du menu de création d’Assets

L’intérêt d’étendre le menu de création d’Assets est de permettre la création de ScriptableObjects. Un Asset de ce type permet de stocker des données et / ou des comportements. Pour se faire, on utilise toujours le même principe des Attributs :

[CreateAssetMenu(fileName ="monAsset", menuName = "Mes Assets/Mon Asset personnalisé")]
public class MyCustomAsset : ScriptableObject
{

}

Notez que cette fois, l’attribut est placé sur la classe est non pas sur une méthode. On y définit le nom par défaut de l’Asset créé ainsi que l’arborescence du menu. On obtient alors ceci :

Exemple de menus personnalisés pour créer un Asset

En cliquant sur l’entrée de menu, l’éditeur va créer un Asset dans le projet :

Asset basé sur un ScriptableObject dans la fenêtre Project

Dans quel contexte l’utiliser :

  • Pour créer vos propres bases de données
  • Pour créer des comportements modulaires

Résultat

Vous savez maintenant comment créer des menus personnalisés, y attacher l’exécution de code, et dans quels contextes utiliser chacune de ces méthodes.

Maintenant, lorsque vous aurez besoin d’effectuer des traitements spécifiques à vos projets, vous pourrez les câbler dans l’éditeur comme bon vous semble.

Fini l’accumulation de temps perdu à trouver des moyens détourner d’effectuer vos traitements. Ils sont maintenant là où vous en avez besoin. Vous pouvez vous focaliser sur la création et réduire la friction qui vous empêche d’avancer.

Pour aller plus loin

Vous avez pu entrevoir une petite partie des possibilités de personnalisation que propose Unity 3D. Pour aller plus loin et apprendre d’autres techniques indispensables pour réduire cette friction, je vous ai préparé une Méga Liste.

Cette Méga Liste, c’est 63 attributs que vous pouvez utiliser pour vous faciliter la vie !

Télécharger la Méga Liste des 63 attributs Unity 3D



  • 2
  • 22
  •  
  •  
  •  
  •  
  •  
  •  
    24
    Partages

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *