Unity 인스펙터에서 키-값 쌍을 얻는 빠른 방법 중 하나는 직렬화 가능한 엔트리 클래스를 정의한 다음 배열 또는 List <>를 사용하는 것입니다. 예를 들어 ...
public class SpellAnimationMap : ScriptableObject
{
[System.Serializable]
public class SpellAnimationEntry
{
public Spell spell;
public AnimationClip animation;
}
public SpellAnimationEntry[] spellAnimations;
}
그러면 자동으로 사용자 지정 관리자를 작성할 필요없이 키와 값을 입력 할 수있는 크기 조정 가능한 목록이 관리자에 표시됩니다.
결과는 다음과 같습니다.
(한 가지 트릭 : 직렬화 된 항목 클래스에 "이름"필드가 포함 된 경우 해당 "문자열 0"머리글 대신 해당 문자열이 표시됩니다.보다 복잡한 데이터를 효율적으로 탐색하려는 경우 유용합니다.
이를 ScriptableObject로 만들면 동일한 애니메이션 세트가 필요한 엔티티 유형 / 인스턴스간에 공유 된 자산으로 처리 할 수 있습니다. (다른 클래스는 Unity에서 인스턴스별로 직렬화되는 경향이 있습니다). 이 경로로 이동하려면 Assets 폴더에 인스턴스를 만들 수 있는 작은 편집기 스크립트를 추가해야 합니다 .
편집 : 이제 훨씬 쉬워졌습니다 . ScriptableObject 위에이 속성을 추가하면됩니다 .
[CreateAssetMenu(fileName = "fileName.asset", menuName = "Some Folder/Menu Label")]
그러면 ScriptableObject가 Create 메뉴에 다음과 같이 배치됩니다.
선택적으로 배열을 검사기에 표시되도록 개인용 및 직렬화 할 수 있지만 클라이언트가보다 효율적인 조회를 위해 사용할 수 있도록 공용 사전 (또는 공용 GetAnimation (Spell spell) 방법을 사용하는 개인 사전)을 추가 할 수 있습니다. OnEnable () 메소드에서 SpellAnimationMap은 인스펙터가 채워진 배열을 반복하여이 사전을 한 번 작성하고 모든 클라이언트 인스턴스간에 이점을 다시 공유 할 수 있습니다. (자산이 처음 생성 될 때 편집기에서 OnEnable ()도 호출되므로 배열을 읽기 전에 널이 아닌지 확인하십시오.)
마지막으로이 항목 데이터 유형에 필요한만큼 추가 할 수 있습니다. 예를 들어 프리 팹도 포함 할 수도 있고, 맞춤법 키에 연결하려는 다른 많은 데이터 비트도 포함될 수 있습니다.
Dictionary <,> 필드를 직접 채우기 위해 사용자 지정 관리자를 작성할 수도 있지만 매끄럽게 작업하는 것은 까다로운 일입니다.