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.

  1. Crea una carpeta anomenada Editor dins de la carpeta Assets.
  2. Dins de la carpeta Editor, crea un nou script anomenat MyComponentEditor.
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 a MyComponent.
  • OnInspectorGUI: Aquesta funció és on definim com es mostrarà el component en l'Inspector.
  • EditorGUILayout.FloatField i EditorGUILayout.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 per myFloat.

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

Mòdul 2: Programació Bàsica en Unity

Mòdul 3: Treballant amb Actius

Mòdul 4: Física i Col·lisions

Mòdul 5: Interfície d'Usuari (UI)

Mòdul 6: Àudio en Unity

Mòdul 7: Programació Avançada

Mòdul 8: Física Avançada i IA

Mòdul 9: Optimització i Rendiment

Mòdul 10: Publicació i Més Enllà

© Copyright 2024. Tots els drets reservats