Saltar al contenido principal

ScriptableObjects y Editor Custom

Los datos de configuración del sistema se editan como assets ScriptableObject. Estos assets se crean desde el menú de Unity Assets > Create > ScriptableObjects > Flux, que expone tres entradas:

Entrada de menúAsset creado
Add Flux State DataFluxAssetData
Step > Add Step Store DataStepAssetData
Add Platform infoPlatformAssetData

Editor custom de FluxAssetData

FluxAssetData no usa el Inspector default de Unity: tiene un Editor custom propio, FluxAssetDataEditor (decorado con [CustomEditor(typeof(FluxAssetData))]), que reemplaza la vista genérica por una vista curada y con campos condicionales. En particular:

  • Los campos relacionados al timer solo se muestran si IsActiveTimer está activo.
  • El campo MinRemainingTimeAfterFocus solo se muestra si IsActiveApplicationFocus está activo.

Esto evita que el diseñador de datos vea (o configure) campos que no aplican a su configuración actual, reduciendo el margen de error en el Inspector.

Cómo escribir un Editor custom similar

Si defines un nuevo ScriptableObject propio y quieres el mismo tipo de vista condicional en el Inspector, el patrón mínimo es:

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(MiScriptableObject))]
public class MiScriptableObjectEditor : Editor
{
private SerializedProperty _isActiveOpcion;
private SerializedProperty _valorCondicional;

private void OnEnable()
{
_isActiveOpcion = serializedObject.FindProperty("IsActiveOpcion");
_valorCondicional = serializedObject.FindProperty("ValorCondicional");
}

public override void OnInspectorGUI()
{
serializedObject.Update();

EditorGUILayout.PropertyField(_isActiveOpcion);

if (_isActiveOpcion.boolValue)
{
EditorGUILayout.PropertyField(_valorCondicional);
}

serializedObject.ApplyModifiedProperties();
}
}

El mismo enfoque —guardar SerializedProperty en OnEnable y decidir qué PropertyField dibujar según el valor de otra propiedad— es el que usa FluxAssetDataEditor para los campos del timer y de MinRemainingTimeAfterFocus.

Ver también