Introducció
En aquest tema, explorarem com crear editors personalitzats i utilitzar Gizmos en Unity. Els editors personalitzats permeten crear interfícies d'usuari personalitzades per als components i actius dins de l'Editor de Unity, mentre que els Gizmos són eines visuals que ajuden a depurar i visualitzar dades en l'escena.
Objectius
- Entendre la importància dels editors personalitzats.
- Aprendre a crear un editor personalitzat per a un component.
- Utilitzar Gizmos per visualitzar dades en l'escena.
- Millorar la productivitat i la depuració amb aquestes eines.
Editors Personalitzats
Què és un Editor Personalitzat?
Un editor personalitzat és una interfície d'usuari creada específicament per a un component o actiu en Unity. Permet personalitzar com es mostren i editen les propietats d'un component en l'Inspector.
Creant un Editor Personalitzat
Pas 1: Crear un Component
Primer, crearem un component senzill per al qual farem un editor personalitzat.
using UnityEngine; public class MyComponent : MonoBehaviour { public float myFloat = 1.0f; public string myString = "Hello, World!"; }
Pas 2: Crear l'Editor Personalitzat
Ara, crearem un editor personalitzat per a MyComponent
.
- Crea una carpeta anomenada
Editor
dins de la carpetaAssets
. - Dins de la carpeta
Editor
, crea un nou script anomenatMyComponentEditor
.
using UnityEditor; using UnityEngine; [CustomEditor(typeof(MyComponent))] public class MyComponentEditor : Editor { public override void OnInspectorGUI() { MyComponent myComponent = (MyComponent)target; myComponent.myFloat = EditorGUILayout.FloatField("My Float", myComponent.myFloat); myComponent.myString = EditorGUILayout.TextField("My String", myComponent.myString); if (GUILayout.Button("Reset Values")) { myComponent.myFloat = 1.0f; myComponent.myString = "Hello, World!"; } if (GUI.changed) { EditorUtility.SetDirty(myComponent); } } }
Explicació del Codi
CustomEditor
: Aquesta etiqueta indica que aquest editor personalitzat és per aMyComponent
.OnInspectorGUI
: Aquesta funció és on definim com es mostrarà el component en l'Inspector.EditorGUILayout.FloatField
iEditorGUILayout.TextField
: Aquests mètodes creen camps d'entrada per a les propietats del component.GUILayout.Button
: Crea un botó que, quan es prem, restableix els valors de les propietats.EditorUtility.SetDirty
: Marca l'objecte com a modificat, assegurant que els canvis es guardin.
Gizmos
Què són els Gizmos?
Els Gizmos són eines visuals que es poden utilitzar per dibuixar formes i línies en l'escena per ajudar a la depuració i visualització de dades.
Utilitzant Gizmos
Pas 1: Crear un Component amb Gizmos
Afegirem Gizmos al nostre component MyComponent
.
using UnityEngine; public class MyComponent : MonoBehaviour { public float myFloat = 1.0f; public string myString = "Hello, World!"; private void OnDrawGizmos() { Gizmos.color = Color.red; Gizmos.DrawSphere(transform.position, myFloat); } }
Explicació del Codi
OnDrawGizmos
: Aquesta funció es crida automàticament per Unity per dibuixar Gizmos en l'escena.Gizmos.color
: Defineix el color del Gizmo.Gizmos.DrawSphere
: Dibuixa una esfera en la posició del transform amb un radi definit permyFloat
.
Exercicis Pràctics
Exercici 1: Editor Personalitzat
Crea un editor personalitzat per a un component que tingui una propietat Color
i una propietat Vector3
. Afegeix un botó que restableixi aquestes propietats als seus valors per defecte.
Exercici 2: Gizmos
Afegeix Gizmos a un component que dibuixi una línia des de la posició del transform fins a una altra posició definida per una propietat Vector3
.
Solucions
Solució 1: Editor Personalitzat
using UnityEditor; using UnityEngine; public class ColorVectorComponent : MonoBehaviour { public Color myColor = Color.white; public Vector3 myVector = Vector3.zero; } [CustomEditor(typeof(ColorVectorComponent))] public class ColorVectorComponentEditor : Editor { public override void OnInspectorGUI() { ColorVectorComponent component = (ColorVectorComponent)target; component.myColor = EditorGUILayout.ColorField("My Color", component.myColor); component.myVector = EditorGUILayout.Vector3Field("My Vector", component.myVector); if (GUILayout.Button("Reset Values")) { component.myColor = Color.white; component.myVector = Vector3.zero; } if (GUI.changed) { EditorUtility.SetDirty(component); } } }
Solució 2: Gizmos
using UnityEngine; public class LineGizmoComponent : MonoBehaviour { public Vector3 targetPosition = Vector3.zero; private void OnDrawGizmos() { Gizmos.color = Color.blue; Gizmos.DrawLine(transform.position, targetPosition); } }
Conclusió
En aquest tema, hem après a crear editors personalitzats per a components en Unity i a utilitzar Gizmos per visualitzar dades en l'escena. Aquestes eines són molt útils per millorar la productivitat i la depuració en el desenvolupament de jocs. En el següent mòdul, explorarem tècniques avançades de física i IA.
Curs de Unity
Mòdul 1: Introducció a Unity
- Introducció a Unity i Instal·lació
- Visió General de la Interfície de Unity
- Creant el Teu Primer Projecte
- Objectes de Joc Bàsics i Components
Mòdul 2: Programació Bàsica en Unity
- Introducció a C# per a Unity
- Creant i Adjuntant Scripts
- Entenent MonoBehaviour
- Gestió Bàsica d'Entrades
Mòdul 3: Treballant amb Actius
- Important i Gestionant Actius
- Utilitzant la Botiga d'Actius
- Creant i Utilitzant Prefabs
- Animació Bàsica
Mòdul 4: Física i Col·lisions
- Introducció a la Física de Unity
- Rigidbody i Col·liders
- Detecció Bàsica de Col·lisions
- Utilitzant Materials de Física
Mòdul 5: Interfície d'Usuari (UI)
- Introducció a la UI de Unity
- Creant i Personalitzant Elements de UI
- Gestió d'Esdeveniments de UI
- Creant Menús i HUDs
Mòdul 6: Àudio en Unity
- Introducció a l'Àudio en Unity
- Important i Utilitzant Clips d'Àudio
- Programació Bàsica d'Àudio
- Àudio 3D i So Espacial
Mòdul 7: Programació Avançada
- Conceptes Avançats de C# per a Unity
- Coroutines i Programació Asíncrona
- Objectes Scriptables
- Editors Personalitzats i Gizmos
Mòdul 8: Física Avançada i IA
- Tècniques Avançades de Física
- Pathfinding i Navegació
- Programació Bàsica d'IA
- Màquines d'Estats i Arbres de Comportament
Mòdul 9: Optimització i Rendiment
- Tècniques de Perfilat i Optimització
- Gestió de Memòria
- Reduint Draw Calls
- Optimitzant Física i Col·lisions