Resumen

Construir herramientas personalizadas dentro del editor de Unity permite organizar y visualizar datos de forma eficiente. En esta ocasión se explica paso a paso cómo crear una editor window que funcione como base de datos para listar todos los scriptable objects de tipo ítem dentro de un proyecto, desde la configuración inicial hasta la carga dinámica de assets.

¿Qué es una editor window y en qué se diferencia de un custom editor?

Una editor window es una ventana independiente dentro del editor de Unity que actúa como herramienta general, a diferencia de un custom editor que se asocia a un componente específico. Este tipo de ventana permite agregar datos, visualizar listas y gestionar información sin depender de un inspector particular [0:20].

Para comenzar, el script debe crearse dentro de la carpeta Editor del proyecto. Todo lo que se dibuje dentro del editor debe vivir en esta carpeta, ya que Unity no la compila al hacer un build, evitando errores en producción [0:42].

El script se llama ItemEditorWindow y hereda de EditorWindow en lugar de MonoBehaviour. Esto significa que se eliminan los métodos Start y Update, ya que no aplican en este contexto [0:55].

csharp using UnityEditor; using System.Collections.Generic;

public class ItemEditorWindow : EditorWindow { List<ItemScriptableObject> items; ItemScriptableObject currentItem; }

  • La lista items almacena todos los scriptable objects encontrados.
  • La variable currentItem guarda el ítem seleccionado en la ventana.
  • Estos datos se borran cada vez que la ventana se cierra [1:15].

¿Cómo abrir la ventana desde el menú de Unity?

Para registrar la ventana en el menú del editor se utiliza el atributo MenuItem, que permite definir una ruta personalizada. El método debe ser static porque Unity lo invoca sin una instancia de la clase [1:40].

csharp [MenuItem("Tools/Item/Editor Window")] static void OpenWindow() { var window = GetWindow<ItemEditorWindow>("Editor de Ítems"); window.position = new Rect( Screen.width / 2, Screen.height / 2, 500, 500 ); }

El método GetWindow<T> es un método estático que crea o enfoca la ventana del tipo indicado. Al pasarle un string como parámetro, se define el título que aparece en la pestaña [2:10].

La propiedad position recibe un Rect que controla la ubicación y el tamaño inicial. En este caso se centra en pantalla con dimensiones de 500 por 500 píxeles, aunque después puede redimensionarse manualmente [2:35].

¿Cómo se cargan los assets al abrir la ventana?

Obtener la lista de ítems dentro de OnGUI sería ineficiente porque este método se ejecuta continuamente. Tampoco puede hacerse en OpenWindow por ser estático. La solución es usar OnEnable, que se ejecuta una sola vez cuando la ventana se abre [3:30].

Para buscar assets se utiliza AssetDatabase.FindAssets, que recibe un filtro en formato string. Este filtro funciona igual que la barra de búsqueda del editor de Unity: con el prefijo t: se filtra por tipo [3:55].

csharp void OnEnable() { string[] guids = AssetDatabase.FindAssets("t:ItemScriptableObject"); items = new List<ItemScriptableObject>();

foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); var asset = AssetDatabase.LoadAssetAtPath<ItemScriptableObject>(path); items.Add(asset); }

}

  • FindAssets no devuelve objetos directamente, sino un array de GUIDs (identificadores únicos) [4:25].
  • GUIDToAssetPath convierte cada GUID en una ruta dentro del proyecto.
  • LoadAssetAtPath<T> carga el asset real desde esa ruta, especificando el tipo esperado [4:50].
  • Finalmente se agrega cada asset a la lista items.

¿Qué es un GUID en el contexto de Unity?

Un GUID (Globally Unique Identifier) es un identificador que Unity asigna a cada asset del proyecto. Cuando se buscan assets mediante AssetDatabase, el resultado inicial es siempre un conjunto de GUIDs que luego deben convertirse a rutas y posteriormente a objetos cargados en memoria [4:30].

Con esta estructura, la ventana ya tiene acceso a todos los scriptable objects de tipo ítem registrados en el proyecto. El siguiente paso será dibujar esos datos visualmente dentro de la ventana para poder interactuar con ellos.

¿Has creado tus propias herramientas de editor en Unity? Comparte tu experiencia y las soluciones que has encontrado.