• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Bind함수의 _objects, objects 질문있습니다.

22.09.23 15:12 작성 조회수 258

0

Dictionary<Type, UnityEngine.Object[]> _objects = new Dictionary<Type, UnityEngine.Object[]>();

// 리플렉션 사용해 enum을 넘겨줘서 이름과 겹치는 UI 게임오브젝트가 있다면 찾아서 저장해주는 함수
protected void Bind<T>(Type type) where T : UnityEngine.Object // reflection
{
	string[] names = Enum.GetNames(type);
	UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; // 1.유니티 오브젝트 배열 초기화
	_objects.Add(typeof(T), objects); // 2. _objects 딕셔너리에 추가 

	for (int i = 0; i < names.Length; i++)
	{
		if (typeof(T) == typeof(GameObject))
			objects[i] = Util.FindChild(gameObject, names[i], true); // 3. objects i번쨰 인덱스에 아기들 찾아 넣어주기
		else
			objects[i] = Util.FindChild<T>(gameObject, names[i], true);

		if (objects[i] == null)
			Debug.Log($"Failed to bind {names[i]}");
	}
}

안녕하세요. 힘 쎄고, 좋은 아침 오늘.

질문합니다. 궁금한 것이 생겨서.

주석에서 볼 수있듯이 2번에서 이미 유니티 오브젝트 배열을 딕셔너리에 추가했습니다.

근데 3번 부분에서는 이미 딕셔너리에 추가한 유니티 오브젝트 배열에서 값을 바꿔주고있습니다. (나중에 값을 바꿔줘서 딕셔너리에 있는 어떤 키의 값은 안바뀌고있는줄암.)

이게 가능한 이유는 값을 참조하고 있어서 그런건가요?

 

답변 1

답변을 작성해보세요.

1

네 맞습니다. 배열도 참조 타입이라, 나중에 데이터를 바꿔주더라도 잘 적용이 됩니다.
이전에 비슷한 질문이 있어서 그림을 그려서 올린 기억이 있는데 못 찾겠네요.