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 Data | FluxAssetData |
Step > Add Step Store Data | StepAssetData |
Add Platform info | PlatformAssetData |
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
IsActiveTimerestá activo. - El campo
MinRemainingTimeAfterFocussolo se muestra siIsActiveApplicationFocusestá 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.