Eine schnelle Möglichkeit, Schlüssel-Wert-Paare in Unitys Inspector abzurufen, besteht darin, eine serialisierbare Eintragsklasse zu definieren und anschließend ein Array oder eine Liste <> davon zu verwenden. z.B...
public class SpellAnimationMap : ScriptableObject
{
[System.Serializable]
public class SpellAnimationEntry
{
public Spell spell;
public AnimationClip animation;
}
public SpellAnimationEntry[] spellAnimations;
}
Dadurch erhalten Sie automatisch eine anpassbare Liste im Inspektor, in der Sie den Schlüssel und den Wert eingeben können, ohne einen benutzerdefinierten Inspektor schreiben zu müssen.
Das Ergebnis sieht so aus:
(Ein Trick: Wenn die serialisierte Eingabeklasse ein Feld "Name" enthält, wird diese Zeichenfolge anstelle der langweiligen Überschriften "Element 0" angezeigt. Nützlich, wenn Sie über komplexere Daten verfügen, in denen Sie effizient navigieren möchten.)
Wenn Sie dies zu einem ScriptableObject machen, können Sie es als ein Asset behandeln, das von Entitätstypen / -instanzen gemeinsam genutzt wird, für die derselbe Animationssatz erforderlich ist. (Andere Klassen werden in Unity in der Regel pro Instanz serialisiert.) Um diesen Weg zu gehen, müssen Sie ein kleines Editor-Skript hinzufügen , mit dem Sie Instanzen davon in Ihrem Assets-Ordner erstellen können .
Bearbeiten: jetzt ist es noch einfacher - Sie können dieses Attribut einfach über Ihrem ScriptableObject hinzufügen :
[CreateAssetMenu(fileName = "fileName.asset", menuName = "Some Folder/Menu Label")]
Dadurch wird das ScriptableObject wie folgt in das Menü "Erstellen" eingefügt:
Sie können das Array optional privat und serialisiert machen, sodass es weiterhin im Inspektor angezeigt wird. Fügen Sie jedoch ein öffentliches Wörterbuch (oder ein privates Wörterbuch mit einer öffentlichen GetAnimation-Methode (Rechtschreibprüfung)) hinzu, das Clients für effizientere Suchvorgänge verwenden können. In der OnEnable () -Methode kann die SpellAnimationMap durch das von Inspektoren gefüllte Array iterieren, um dieses Wörterbuch erneut zu erstellen, und dabei den Vorteil für alle Clientinstanzen gemeinsam nutzen. (Beachten Sie, dass OnEnable () auch im Editor aufgerufen wird, wenn das Asset zum ersten Mal erstellt wird. Überprüfen Sie daher, ob Ihr Array nicht null ist, bevor Sie versuchen, es zu lesen.)
Schließlich können Sie diesem Eintragsdatentyp so viel hinzufügen, wie Sie benötigen. Dies kann zum Beispiel auch das Fertighaus oder eine beliebige Anzahl anderer Datenbits sein, die Sie mit der Rechtschreibprüfung verknüpfen möchten.
Es ist auch möglich, benutzerdefinierte Inspektoren zu schreiben, um Dictionary <,> -Felder direkt auszufüllen, aber der Eindruck, den ich bekomme, ist, dass es schwierig ist, reibungslos zu arbeiten.