Um das zu tun Ich habe eine Basisklasse MovementPattern, die so aussieht
Code: Select all
[RequireComponent(typeof(Rigidbody2D))]
public class MovementPattern : MonoBehaviour
{
protected Rigidbody2D rb;
protected MovementPatternData movementPatternData;
protected virtual void Awake()
{
rb = GetComponent();
}
public virtual void SetMovementPatternData(MovementPatternData newMovementPatternData)
{
movementPatternData = newMovementPatternData;
}
public virtual MovementPatternData GetMovementPatternData()
{
return movementPatternData;
}
}
Code: Select all
[Serializable]
public class MovementPatternData : ScriptableObject
{
}
[Serializable]
public class SinusMovementPatternData : MovementPatternData
{
[SerializeField]
public float amplitude = 1f;
[SerializeField]
public float frequency = 1f;
[SerializeField]
public Vector2 direction = 1f;
}
Code: Select all
public class SinusMovementPattern : MovementPattern
{
[SerializeField]
public SinusMovementPatternData sinusMovementPatternData;
public override void SetMovementPatternData(SinusMovementPatternData newMovementPatternData)
{
base.SetMovementPatternData(newMovementPatternData);
sinusMovementPatternData = newMovementPatternData;
}
}
Sie sehen so aus Dies im Inspektor:


Ich vermute, wenn Ich kann meine Datenklassen initialisieren, sie werden im Inspektor anstelle der leeren Felder angezeigt. Wenn ich jedoch versuche, sie zum Beispiel mit zu initialisieren:
Code: Select all
public SinusMovementPatternData sinusMovementPatternData = ScriptableObject.CreateInstance();
Mein Problem hängt mit den MovementPatternData-Objekten zusammen. Ich möchte, dass die untergeordneten Elemente von MovementPattern ihr eigenes MovementPatternData-Feld ausfüllen, wenn sie erstellt werden , und ich möchte den Typ dieser Daten Objekt, um den ursprünglichen Typ MovementPatternData zu „ersetzen“, um den untergeordneten Typ zu erhalten, der dem aktuellen Bewegungsmuster entspricht ... Wenn ich beispielsweise einem Objekt ein sinusMovementPattern hinzufüge, sollte es über ein eigenes SinusMovementPatternData, der die ursprünglichen MovementPatternData „ersetzt“.
Ich verstehe aus früheren Recherchen, dass ich einen benutzerdefinierten Editor, skriptfähige Objekte usw. verwenden sollte [SerializeReference] irgendwo, ich würde mich über zusätzliche Anleitung dazu freuen!