Intenté crear un objeto anidado en el script C# en Unity y cambiar los valores en él.
Clase de objeto anidado
using UnityEngine; public class Replica : ScriptableObject { public string Text; public int Speed = 1; public int PersonaID = 0; }Clase con objeto anidado
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/DialogContainer", order = 1)] public class DialogContainer : ScriptableObject { public Replica[] Replicas; // Here is nested object public Sprite[] Avatars; }Y cuando creé el ScriptableObject vi eso: Foto de la interfaz de ScriptableObject
Aquí solo puedo poner una instancia de la clase allí, pero no puedo configurarla.
Pero quiero cambiar los valores directamente en el inspector sin crear e insertar un objeto de clase "Replica" como en InputManager, donde puedo crear un obj más en el eje, abrirlo y cambiar los valores en el inspector de esa manera. Foto de la interfaz que quiero ver
Si desea configurar su clase en el inspector, esa clase no debe derivarse de MonoBehaviour o ScriptableObject y estar con la etiqueta [System.Serializable] de lo que puede serializarla en una clase anidada sin crear una instancia.
Réplica:
[System.Serializable] public class Replica { public string Text; public int Speed = 1; public int PersonaID = 0; }Contenedor de diálogo:
using System.Collections.Generic; using UnityEngine; public class DialogContainer : MonoBehaviour{ public List<Replica> Replicas; public Sprite[] Avatars; }De lo que vi eso: captura de pantalla del Inspector
A menos que haga un editor personalizado para DialogContainer , no puede hacer lo que quiere hacer. Si tiene un ScriptableObject principal que contiene una lista secundaria de ScriptableObject s, no puede editar los campos de cada hijo cuando tiene el principal seleccionado en su Vista de proyecto.
Tendrá que editar cada Replica secundaria seleccionando la instancia de Replica en la Vista del proyecto. Luego, el Inspector le permitirá editar esa Replica .