- ObjectPool
ObjectPool
진행 중인 팀 프로젝트에서 제작한 ObjectPool
목적
게임 오브젝트들의 생성과 파괴를 최소화 하는것으로 최적화와 게임 오브젝트를 생성하는 모든 곳에서 편하게 접근하여
GameObject를 생성하기 위한 목적으로 구현했다.
ObjectPool
-
Dictionary , List
Dictionary는 string을 Key로 사용하고 List<GameObject>를 Value로 사용했다. key부분에 있어서 여러 고민이 있었는데 Type으로 할 경우 Type이 같지만 다른 오브젝트인 경우에 대응이 어렵다고 생각됬고 그래서 string과 type모두를 사용하는것으로 방향을 잡았다 그래서 처음에는 (type, string) 튜플을 키로 사용했는데 ~~~ 결국에는 Type과 오브젝트의 이름을 사용해서 만든 string을 key로 사용하게 되었다. 그리고 오브젝트를 생성할 떄는 오브젝트의 이름을 나중에 오브젝트를 pool에 다시 넣을떄 유리하도록 만들어준 key와 동일하게 설정했다.
-
메서드 오버 로드
Pool을 사용해서 GameObject를 가져오는 메서드를 prefabs로 불러올때
-
Generic, Overload
제네릭을 사용해서 여러가지 타입의 리소스를 로드할 수 있도록 했고 폴더의 경로가 다른 경우를 대비해서 오버로드로 직접 경로를 지정할 수 있도록 구현하였다.
-
Lazy Loading
여러가지 카드와 몬스터 리소스들을 관리해야 되지만 카드와 몬스터들이 항상 전부 쓰이는 것이 아니라고 생각해서 LazyLoading 방식을 사용했다. 해당 리소스를 처음 사용한다면 로드를 하지만 이미 로드한 적 있다면 캐싱된 Dictionary를 통해서 꺼내서 사용한다. 그리고 너무 많은 리소스가 쌓일 경우를 대비해서 씬을 이동할 때마다 캐싱되어 있는 리소스의 Dictionary를 클리어하고 참조 하고 있지 않는 리소스들을 UnLoad()하는 메서드를 실행시키도록 했다.