jsg0912 / beat_warrior

0 stars 0 forks source link

ObjectPoolManager #9

Open Nights-SDH opened 2 months ago

Nights-SDH commented 2 months ago

Unity 최적화 중 하나의 기법으로 Object를 미리 많이 만들어 둔 후에 필요할 때마다 꺼내쓰는 방식으로 필요할 때마다 만들어내는 것보다 효율적임nity 최적화 중 하나의 기법으로 Object를 미리 많이 만들어 둔 후에 필요할 때마다 꺼내쓰는 방식으로 필요할 때마다 만들어내는 것보다 GC 측면에서 효율적임

Nights-SDH commented 2 months ago

@jsg0912 아래 코드에서 MiniMapIcon이라는 Component에 의존적인 이유가 있을까? private GameObject CreatePooledItem() { GameObject poolGo = Instantiate(IconPrefab, IconSpawnPoint.transform); poolGo.GetComponent().Pool = this.Pool; return poolGo; }

jsg0912 commented 1 month ago

오브젝트 풀링 구현만에 초점을 두고 단일 오브젝트 풀링으로 작성하여 의존적인 코드가 작성되어있었음. 따라서 다중 오브젝트 풀링을 사용하는 외부 에셋사용으로 Component 의존성을 없앰

jsg0912 commented 1 month ago

Object Pool Aseet 최종결정 : https://assetstore.unity.com/packages/tools/integration/my-pooler-object-pooling-system-189414?srsltid=AfmBOopDLXpl5I3PWXKkQBYoCaONGDLiU7k7VQ1GMh-oTT1p4mKg_exb

사유 : 이식성이 뛰어나다. 유연성도 뛰어나다

우선 순위 : 1. https://assetstore.unity.com/packages/tools/integration/my-pooler-object-pooling-system-189414?srsltid=AfmBOopDLXpl5I3PWXKkQBYoCaONGDLiU7k7VQ1GMh-oTT1p4mKg_exb 2021년 7월 12일 하트 23/ 리뷰 13 (5/5) 특징 : x 2. https://github.com/2881099/SafeObjectPool last year 38 forks 3. https://github.com/UnityPatterns/ObjectPool?tab=readme-ov-file 10 years ago 94 forks 4. https://assetstore.unity.com/packages/tools/easy-object-pool-31928?srsltid=AfmBOor_ha-WRxl1-mH2NRBWdAPeu536QI7SsPHMz4zMnG1xRqfVRdsb 2015년 3월 19일 하트 121/리뷰23 (4/5) 긍정적 : 쉽다, 부정적 : 유연하지 않다

Nights-SDH commented 1 month ago

@jsg0912 private static ObjectPooler _instance; public static ObjectPooler Instance { get { if (_instance == null) { GameObject go = new GameObject("ObjectPooler"); go.AddComponent(); } return _instance; } }

  1. ObjectPooler는 저렇게 생성할 경우, tag 설정이 안되어서 사용이 안됨 => ObjectPooler는 매 씬마다 있을지? 메인 화면에서부터 있을지? 아니면 인게임에서 생성한다면 tag 및 gameobject등을 어떻게 설정할지 전략 고민이 필요함
  2. instance가 없다고 해서, 이미 씬에 있지만 등록이 안된 경우가 고려가 안 되어 있음 Player의 instance 부분 참고 바람
Nights-SDH commented 1 month ago

바로 위에 1번의 경우 추가로 확인해보니 ObjectPooler Prefab이 있는데 PrototypeScene에 등록된 tag들이 Prefab에 없음 tag 추가 및 관리할 때 Prefab에서 작업했음 2번도 내가함 담당자가 알고 있으면 될 것 같음