오늘은 Unity에서 PoolManager를 만드는 중 키 값을 enum이나 string 대신 사용할 더 좋은 방법이 없을까 고민하다가 GetInstanceID라는 메서드를 발견했다.
이 메서드는 Prefab의 고유한 Instance ID를 반환해주며, 이를 활용하면 Dictionary의 키 값을 string 대신 int로 설정할 수 있어서 문자열 비교를 배제할 수 있게 됐다.
enum이나 string이 불편했던 이유
기존에 enum을 사용하면 새로운 풀을 추가할 때마다 enum 값을 추가해야 하는 번거로움이 있었다.
string을 사용하는 경우에도 문자열 비교로 인해 성능 저하가 생길 수 있고, 오타로 인한 에러가 발생할 가능성도 있었다.
GetInstanceID 사용
GetInstanceID를 사용하면 이러한 번거로움을 피할 수 있다. Prefab 자체의 Instance ID를 키 값으로 사용하니, 새로운 풀을 추가할 때 따로 키 값을 관리하지 않아도 된다. 코드도 간결해지고, int 기반 키 검색은 string 비교보다 더 효율적이다.
GetInstanceID 사용 시 주의할 점
GetInstanceID는 Prefab의 저장 경로나 인스턴스화된 객체에 따라 반환 값이 달라질 수 있다. 따라서 동일한 Prefab에서 항상 같은 Instance ID를 얻도록 관리해야 한다.
예시 코드
private Dictionary<int, Queue<Component>> poolDictionary = new Dictionary<int, Queue<Component>>();
int poolKey = prefab.GetInstanceID();
'내일배움캠프' 카테고리의 다른 글
내일배움캠프: LayerMask와 layer (0) | 2024.12.11 |
---|---|
내일배움캠프: SortingLayer (1) | 2024.12.10 |
내일배움캠프: Cinemachine Follow 기능 사용 중 캐릭터 떨림 (1) | 2024.12.06 |
내일배움캠프: 타일맵 이미지 동적으로 변경하기 (2) | 2024.12.05 |
내일배움캠프: Unity Pool (1) | 2024.12.03 |