Unity – Custom Data Objekte im Inspektor
Hier geht es darum, wie man in Unity eigene komplexe Datenstrukturen im Inspektor verwenden kann.
Standardtypen wie string, float, Transform, Texture2D, etc. lassen sich als Einzelelemente ganz einfach im Inspektor darstellen, in dem man sie als public Fields deklariert. Was aber, wenn man eigene Datenstrukturen verwenden möchte?
Eigene Datenstruktur
Beispiel: Folgende Klasse wollen wir im Inspektor füllen können.
public class NpcProfile { public string name; public Texture2D image; }
In der Componentenklasse wird ein Feld vom Typ NpcProfile deklariert.
public class InspectorTest : MonoBehaviour { public NpcProfile npcProfile; }
Und siehe da: Nach Hinzufügen des Skripts zu einem Gameobjekt sieht man nix.
Es fehlt mindestens ein Zauberwort.
Serializable
Will man die eigene Klasse im Inspektor sehen und befüllen können, muss man dieser das Attribut Serializable geben. Erst dann ist es möglich, die public Fields der Klasse zu serialisieren und zu speichern.
using UnityEngine; using System; [Serializable] public class NpcProfile { ...
Befüllen mit Gameobjekt
Möchte man möchte ein Feld welches mit einem GameObjekt befüllt werden soll, z.B. in dem man ein GameObjekt aus der Hierarchy direkt auf das Feld im Inspektor zieht, dann muss die Klasse von MonoBehaviour abgeleitet werden.
[Serializable] public class NpcProfile2 : MonoBehaviour {
public class InspectorTest : MonoBehaviour { public NpcProfile npcProfile; public NpcProfile2 npcProfileAsGameObj; ... }
Jetzt erwartet das Feld ein GameObject Component.
Arrays
Um mehrere Elemente der eigenen Datentstruktur im Inspektor anlegen zu können, kann man Arrays verwenden.
[Serializable] public class InspectorTest { ... public NpcProfile[] npcProfiles;
Alternative: Struct
Man muss nicht zwingend Klassen verwenden, es genügt auch eine Struktur.
[Serializable] public class InspectorTest { ... [Serializable] public struct NpcProfileStruct { public string name; public Texture2D image; } public NpcProfileStruct[] npcProfilesAsStruct; ...
Ich hoffe wie immer, diese erstbeste Lösung war hilfreich.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen