Pour accélérer le développement des applications, créez des éditeurs personnalisés pour les composants que vous utilisez couramment. Cette page vous montre comment créer un script simple pour fabriquer des GameObjectsL’objet fondamental des scènes Unity, qui peut représenter des personnages, des accessoires, des décors, des caméras, des points de passage, et plus encore. La fonctionnalité d’un GameObject est définie par les Components qui lui sont attachés. Plus d’infos
Voir dans Glossaire toujours regarder un point.
- Créer un script C# et le nommer « »LookAtPoint » ».
- Ouvrir le script et remplacer son contenu par le code ci-dessous.
- Attacher le script à un GameObject dans votre ScèneUne Scène contient les environnements et les menus de votre jeu. Pensez à chaque fichier Scene unique comme à un niveau unique. Dans chaque Scène, vous placez vos environnements, obstacles et décorations, concevant et construisant essentiellement votre jeu en morceaux. Plus d’infos
Voir dans le glossaire.
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}
Lorsque vous entrez en mode Play, le GameObject auquel vous avez attaché le script s’oriente désormais vers les coordonnées que vous avez définies dans la propriété « Look At Point ». Lors de l’écriture des scripts de l’éditeurUn morceau de code qui vous permet de créer vos propres composants, de déclencher des événements de jeu, de modifier les propriétés des composants dans le temps et de répondre aux entrées de l’utilisateur de la manière que vous souhaitez. Plus d’info
Voir dans le Glossaire, il est souvent utile de faire en sorte que certains scripts s’exécutent pendant le mode Édition, alors que votre application n’est pas en cours d’exécution. Pour ce faire, ajoutez l’attribut ExecuteInEditMode
à la classe, comme ceci:
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}
Maintenant, si vous déplacez le GameObject dans l’éditeur, ou modifiez les valeurs de « Look At Point » dans l’inspecteurUne fenêtre Unity qui affiche des informations sur le GameObject, l’actif ou les paramètres du projet actuellement sélectionnés, vous permettant d’inspecter et de modifier les valeurs. Plus d’infos
Voir dans le glossaire, le GameObject met à jour sa rotation afin qu’il regarde le point cible dans l’espace mondial.
Faire un éditeur personnalisé
Ce qui précède démontre comment vous pouvez obtenir des scripts simples s’exécutant pendant le temps d’édition, cependant cela seul ne vous permet pas de créer vos propres outils d’éditeur. L’étape suivante consiste à créer un éditeur personnalisé pour le script que vous venez de créer.
Lorsque vous créez un script dans Unity, par défaut il hérite de MonoBehaviour, et est donc un composant que vous pouvez attacher à un GameObject. Lorsque vous placez un composant sur un GameObject, l’inspecteur affiche une interface par défaut que vous pouvez utiliser pour afficher et modifier chaque variable publique, par exemple : un entier, un flottant ou une chaîne de caractères.
Voici comment se présente par défaut l’inspecteur du composant LookAtPoint :
Un éditeur personnalisé est un script séparé qui remplace cette disposition par défaut par les contrôles d’éditeur que vous choisissez.
Pour créer l’éditeur personnalisé pour le script LookAtPoint :
- Créer un nouveau script C# et le nommer « LookAtPointEditor ».
- Ouvrir le script et remplacer son contenu par le code ci-dessous.
//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor { SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); serializedObject.ApplyModifiedProperties(); }}
Cette classe doit hériter de Editor. L’attribut CustomEditor informe Unity du composant pour lequel il doit agir en tant qu’éditeur. L’attribut CanEditMultipleObjects indique à Unity que vous pouvez sélectionner plusieurs objets avec cet éditeur et les modifier tous en même temps.
Unity exécute le code dans OnInspectorGUI il affiche l’éditeur dans l’inspecteur. Vous pouvez mettre n’importe quel code d’interface graphique ici et il fonctionne de la même manière que OnGUI, mais s’exécute à l’intérieur de l’Inspecteur. L’éditeur définit la propriété cible que vous pouvez utiliser pour accéder au GameObject que vous inspectez.
Voici à quoi ressemble l’inspecteur du composant LookAtPoint avec le nouvel éditeur:
Cela ressemble beaucoup (bien que le champ « Script » ne soit maintenant pas présent, car le script de l’éditeur n’ajoute aucun code d’inspecteur pour l’afficher).
Mais maintenant que vous avez le contrôle sur la façon dont l’Inspecteur s’affiche dans un script d’éditeur, vous pouvez utiliser le code que vous voulez pour disposer les champs de l’Inspecteur, permettre à l’utilisateur d’ajuster les valeurs, et même afficher des graphiques ou d’autres éléments visuels. En fait, tous les inspecteurs que vous voyez dans l’éditeur Unity, y compris les inspecteurs plus complexes comme le terrainLe paysage de votre scène. Un Terrain GameObject ajoute un grand plan plat à votre scène et vous pouvez utiliser la fenêtre de l’inspecteur du Terrain pour créer un paysage détaillé. Plus d’infos
Voir dans le glossaire les paramètres d’importation du système et de l’animation, sont tous réalisés à l’aide de la même API à laquelle vous avez accès lorsque vous créez vos propres éditeurs personnalisés.
Voici un exemple simple qui étend votre script d’éditeur pour afficher un message qui indique si le point cible est au-dessus ou au-dessous du GameObject:
//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor{ SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); serializedObject.ApplyModifiedProperties(); if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Above this object)"); } if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Below this object)"); } }}
Voici à quoi ressemble l’inspecteur du composant LookAtPoint avec le message indiquant si le point cible est au-dessus ou au-dessous du GameObject.
Vous avez un accès complet à toutes les commandes IMGUI pour dessiner tout type d’interface, y compris le renduLe processus de dessin de graphiques à l’écran (ou à une texture de rendu). Par défaut, la caméra principale d’Unity rend sa vue à l’écran. Plus d’infos
Voir dans le glossaire Scènes utilisant une caméraComposant qui crée une image d’un point de vue particulier dans votre scène. La sortie est soit dessinée à l’écran, soit capturée comme une texture. Plus d’infos
Voir dans le glossaire dans les fenêtres de l’éditeur.
Ajouts à la vue de la scène
Vous pouvez ajouter du code supplémentaire à la vue de la scèneUne vue interactive dans le monde que vous créez. Vous utilisez la vue Scène pour sélectionner et positionner les décors, les personnages, les caméras, les lumières, et tous les autres types d’objets de jeu. Plus d’infos
Voir dans le glossaire. Pour ce faire, implémentez OnSceneGUI dans votre éditeur personnalisé.
OnSceneGUI fonctionne exactement comme OnInspectorGUI, sauf qu’il s’exécute dans la vue Scène. Pour vous aider à réaliser vos propres contrôles d’édition, vous pouvez utiliser les fonctions définies dans la classe Handles. Toutes les fonctions qui s’y trouvent sont conçues pour travailler dans des vues Scène 3D.
//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor{ SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Above this object)"); } if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Below this object)"); } serializedObject.ApplyModifiedProperties(); } public void OnSceneGUI() { var t = (target as LookAtPoint); EditorGUI.BeginChangeCheck(); Vector3 pos = Handles.PositionHandle(t.lookAtPoint, Quaternion.identity); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Move point"); t.lookAtPoint = pos; t.Update(); } }}
Si vous voulez ajouter des objets GUI 2D (par exemple : GUI ou EditorGUI), vous devez les envelopper dans des appels à Handles.BeginGUI() et Handles.EndGUI().