Jednym szybkim sposobem na uzyskanie par klucz-wartość w inspektorze Unity jest zdefiniowanie możliwej do serializacji klasy wejściowej, a następnie użycie ich tablicy lub listy <>. na przykład...
public class SpellAnimationMap : ScriptableObject
{
[System.Serializable]
public class SpellAnimationEntry
{
public Spell spell;
public AnimationClip animation;
}
public SpellAnimationEntry[] spellAnimations;
}
Automatycznie da to listę kontrolera, której rozmiar można zmienić, w której można wprowadzić klucz i wartość, bez konieczności pisania niestandardowego inspektora.
Wynik wygląda następująco:
(Jedna sztuczka: jeśli serializowana klasa wejściowa zawiera pole „Nazwa”, ten ciąg zostanie wyświetlony zamiast nijakich nagłówków „Element 0”. Przydatne, jeśli masz bardziej złożone dane, aby móc efektywnie nawigować.)
Uczynienie tego ScriptableObject pozwala traktować go jako Zasób współdzielony między typami encji / instancjami, które wymagają tego samego zestawu animacji, unikając narzucania się duplikacji listy dla każdego z nich. (Inne klasy są zazwyczaj serializowane na instancję w Unity). Aby przejść tę trasę, musisz dodać mały skrypt edytora, aby umożliwić tworzenie ich instancji w folderze Zasoby .
Edycja: teraz jest jeszcze łatwiej - możesz po prostu dodać ten atrybut nad ScriptableObject:
[CreateAssetMenu(fileName = "fileName.asset", menuName = "Some Folder/Menu Label")]
Spowoduje to umieszczenie obiektu ScriptableObject w menu Utwórz, na przykład:
Opcjonalnie możesz ustawić tablicę jako prywatną i zserializowaną, aby nadal wyświetlała się w inspektorze, ale dodać publiczny Słownik (lub słownik prywatny z publiczną metodą GetAnimation (pisownia)), aby klienci mogli z niego korzystać w celu bardziej wydajnego wyszukiwania. W metodzie OnEnable () SpellAnimationMap może iterować przez tablicę wypełnioną inspektorem, aby zbudować ten słownik ponownie, ponownie dzieląc korzyści między wszystkimi instancjami klienta. (Zauważ, że OnEnable () jest także wywoływany w edytorze, gdy zasób jest tworzony po raz pierwszy, więc upewnij się, że tablica nie ma wartości null, zanim spróbujesz go odczytać)
Na koniec możesz dodać tyle danych wejściowych, ile potrzebujesz. Może na przykład obejmować prefabrykaty lub dowolną liczbę innych bitów danych, które chcesz połączyć z kluczem pisowni.
Możliwe jest również pisanie niestandardowych inspektorów, aby bezpośrednio wypełniać pola Dictionary <,>, ale mam wrażenie, że dziwnie jest pracować płynnie.