• Home
  • About
    • KKsDev photo

      KKsDev

      게임 프로그래머를 목표로 Unity, C#을 공부하고 있습니다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

팀 프로젝트 FosterTheMonster - ObjectPool

10 Nov 2023

Reading time ~1 minute

nbcbanner

  1. 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()하는 메서드를 실행시키도록 했다.
    



nbcthumbnail



TIL내일배움캠프스파르타TeamProjectObjectPool Share Tweet +1