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
Editordins 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.FloatFieldiEditorGUILayout.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
