강의로 보면서 게임을 만드는 과정에서 PoolManager를 배습니다.
보통 저렇게 화살을 생성하기 위해 화살을 Prefabs로 만들어주고 Instantiate와 Destroy를 활용해서 화살을 관리 해줬었다.
하지만 이렇게 관리하게 되면 두 함수들이 상당히 많은 메모리를 잡아먹게 됩니다. 따라서 화살이 필요할 때 새로 생성하는 것이 아닌 오브젝트 풀매니저에게 미리 생성해둬서 필요한 만큼 쓰고 반환하는 방식인 PoolManager를 사용한다고 합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SearchService;
public class ObjectPool : MonoBehaviour //pool스크립트 만들기
{
[System.Serializable]
public struct Pool //pool 구조체 만들기
{
public string tag;
public GameObject prefab;
public int size;
}
public List<Pool> pools;
public Dictionary<string, Queue<GameObject>> poolDictionary;
private void Awake()
{
poolDictionary = new Dictionary<string, Queue<GameObject>>();
foreach (var pool in pools)
{
Queue<GameObject> objectPool = new Queue<GameObject>();
for (int i = 0; i < pool.size; i++)
{
GameObject obj = Instantiate(pool.prefab);
obj.SetActive(false);
objectPool.Enqueue(obj);
}
poolDictionary.Add(pool.tag, objectPool);
}
}
public GameObject SpawnFromPool(string tag)
{
if (!poolDictionary.ContainsKey(tag))
return null;
GameObject obj = poolDictionary[tag].Dequeue();
poolDictionary[tag].Enqueue(obj);
return obj;
}
}
.Tag에 풀매니저 적용할 Prefab 태그 적어주고 해당 오브젝트 주입 사이즈에 미리 생성해둘 갯수 설정
20개를 풀에 생성한 뒤 필요한 만큼 사용하고 사용하지 않는 오브젝트는 반환하는 방식으로 변경
'코린이 부트캠프 일상' 카테고리의 다른 글
유니티 싱글톤 패턴 (0) | 2023.12.14 |
---|---|
유니티 개인 프로젝트 ATM 기능 구현 (0) | 2023.12.14 |
C# 유니티 팀프로젝트 똥피하기 (1) | 2023.12.08 |
유니티 엔진 구조 /생명주기 (0) | 2023.12.07 |
유니티 팀프로젝트 (0) | 2023.12.05 |