반응형
던전에 사용할 총알을 오브젝트 풀링으로 구현하였다.
플레이어 총알과 몬스터 총알을 나누기 위해 만들었다.
SerializeField인 ObjectPoolingPrefabs에 총알 프리팹을 넣어주면 프리팹 이름을 통해 오브젝트를 분류한다.
나는 싱글톤으로 DungeonManager를 생성해 그 안에 이 코드를 넣어주었다.
Awake나 Start에 InitializeObject 함수를 넣어줘야 한다.
[SerializeField]
private GameObject[] ObjectPoolingPrefabs;
private Dictionary<string, GameObject> poolingObjectPrefabs = new Dictionary<string, GameObject>();
private Dictionary<string, Queue<GameObject>> poolingObjectQueues = new Dictionary<string, Queue<GameObject>>();
private void InitializeObject(int initCount)
{
for (int i = 0; i < ObjectPoolingPrefabs.Length; i++)
{
poolingObjectPrefabs.Add(ObjectPoolingPrefabs[i].name, ObjectPoolingPrefabs[i]);
poolingObjectQueues.Add(ObjectPoolingPrefabs[i].name, new Queue<GameObject>());
for (int j = 0; j < initCount; j++)
{
poolingObjectQueues[ObjectPoolingPrefabs[i].name].Enqueue(CreateNewObject(ObjectPoolingPrefabs[i].name));
}
}
}
private GameObject CreateNewObject(string objectName) {
var newObj = Instantiate(poolingObjectPrefabs[objectName], transform, true);
newObj.gameObject.SetActive(false);
return newObj;
}
public GameObject GetObject(string objectName)
{
if (instance.poolingObjectQueues[objectName].Count > 0)
{
var obj = instance.poolingObjectQueues[objectName].Dequeue();
obj.transform.SetParent(null);
obj.gameObject.SetActive(true);
return obj;
}
else
{
var newObj = instance.CreateNewObject(objectName);
newObj.gameObject.SetActive(true);
newObj.transform.SetParent(null);
return newObj;
}
}
public void ReturnObject(string objectName, GameObject obj)
{
obj.gameObject.SetActive(false);
obj.transform.SetParent(instance.transform);
instance.poolingObjectQueues[objectName].Enqueue(obj);
}
생성한 오브젝트는
GameObject bullet = DungeonManager.instance.GetObject("MonsterBullet");
이런 식으로 가져와 사용하면 된다.
오브젝트 사용이 끝났으면
DungeonManager.instance.ReturnObject(poolingObjectName, gameObject);
이렇게 오브젝트를 돌려보낸다.
이때 인수로 들어가는 poolingObjectName은 총알을 초기화할 때(GetObject로 총알을 가져왔을 때) 총알 안에 저장해두도록 한다.
반응형
'프로그래밍 > 유니티 및 C#' 카테고리의 다른 글
[유니티] Update, FixedUpdate, LateUpdate 차이 (0) | 2024.06.19 |
---|---|
[유니티/C#] 책 UI 만들기 (1) | 2024.01.23 |
[유니티/C#] Content 크기에 맞춰 늘어나는 Scroll View 만들기(유동적인 Scroll View) (0) | 2024.01.22 |
[유니티 2D/C#] 탑다운 뷰에서 아이템이 바닥에서 튕기는 연출 만들기 (0) | 2023.11.10 |
[유니티/C#] csv 파일을 원하는 타입으로 읽기(Generic 사용) (0) | 2023.11.08 |