유니티 UI Binding 오류Unity/Trouble Shooting2024. 1. 3. 20:35
Table of Contents
관련 링크
해당 블로그에 UI 바인딩 코드를 참고하는 도중 오류가 발생하였다.
문제 코드
public void Binding<T>(GameObject parent) where T : UnityEngine.Object
{
T[] objects = parent.GetComponentsInChildren<T>(true);
// 오류 부분
Dictionary<string, Object> objectDict = objects.ToDictionary(comp => comp.name, comp => comp as Object);
_objects[typeof(T)] = objectDict;
AssignComponentsDirectChild<T>(parent);
}
Error : ArgumentException: An item with the same key has already been added.
해당 오류로 기존 Button과 Slider 부분은 오류가 발생하지 않았지만, TextMeshProUGUI, Transform을 가져올 때 키 중복 오류가 발생하였다.
아마 텍스트와 트랜스폼 부분은 가져오지 말아야할 다른 오브젝트에 있는 해당 컴포넌트도 인식을 해서 딕셔너리에 등록이 돼버려서 중복키로 읽어오는 거 같았다.
문제 해결
public void Binding<T>(GameObject parent) where T : UnityEngine.Object
{
T[] objects = parent.GetComponentsInChildren<T>(true);
// 중복된 이름을 가진 컴포넌트들을 하나의 키로 묶기
// 각 그룹에서 첫 번째로 등장하는 컴포넌트를 선택하여 딕셔너리에 저장
Dictionary<string, UnityEngine.Object> objectDict = objects
.GroupBy(comp => comp.name)
.ToDictionary(group => group.Key, group => group.First() as UnityEngine.Object);
_objects[typeof(T)] = objectDict;
AssignComponentsDirectChild<T>(parent);
}
딕셔너리에 새로운 값을 추가하기 전에 해당 키가 이미 존재하는지 확인해서 이미 존재한다면 더 이상 추가하지 않도록 처리하였다.
해결방법은 GroupBy를 사용하여 중복된 키를 그룹화하고 각 그룹에 대해 처음 등장하는 항목을 선택하도록 고쳤다.
'Unity > Trouble Shooting' 카테고리의 다른 글
유니티 UI 화면 비율 문제 (0) | 2024.01.31 |
---|---|
유니티 APK 빌드시 Text 파일 경로 문제 (0) | 2024.01.29 |
유니티 FirebaseDatabase 인스턴스 초기화 오류 (0) | 2024.01.13 |
유니티 AudioSource 최대 중첩 오류 (0) | 2024.01.08 |