CS
오브젝트 풀링(Object Pooling)이란
llIlIIllII
2023. 11. 22. 09:22
오브젝트 풀링(Object Pooling)은 특히 게임 개발에서 자주 사용되는 기법으로, 유니티(Unity)에서도 매우 중요한 역할을 한다.
이 기법의 핵심은 게임 오브젝트를 필요할 때마다 생성하고 파괴하는 대신 미리 생성해두고 필요할 때 재사용하는 것이다.
- 성능 최적화
오브젝트를 생성하고 파괴하는 과정은 리소스를 많이 소모한다. 특히, 자주 생성 및 파괴되는 오브젝트가 많은 게임에서 이러한 과정은 성능 저하를 일으킬 수 있습니다. 오브젝트 풀링은 이러한 성능 저하를 방지하기 위해 사용된다. - 재사용 메커니즘
필요할 때 오브젝트를 풀(pool)에서 꺼내 사용하고, 사용이 끝나면 다시 풀로 반환하는 방식이다. 이렇게 함으로써, 오브젝트의 생성과 파괴에 드는 비용을 줄일 수 있다.
유니티에서의 오브젝트 풀링 구현 방법
오브젝트 풀 생성
오브젝트 풀을 관리할 클래스를 생성한다.
이 클래스는 생성할 오브젝트의 타입을 관리하고, 필요한 수만큼 오브젝트 인스턴스를 미리 생성하여 리스트나 큐에 저장한다.
오브젝트 획득 및 반환 메커니즘 구현
오브젝트를 요청할 때, 풀에서 오브젝트를 꺼내 사용하고, 사용이 끝나면 오브젝트를 다시 풀에 반환하는 메서드를 구현한다.
오브젝트를 꺼낼 때는 활성화 (SetActive(true))하고, 반환할 때는 비활성화 (SetActive(false))한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PoolManager : MonoBehaviour
{
public GameObject[] prefabs; // 오브젝트풀링을 사용할 프리펩
List<GameObject>[] pools
public static PoolManager I;
private void Awake()
{
if (I == null)
{
I = this;
}
else if (I != this)
{
Destroy(gameObject);
}
DontDestroyOnLoad(gameObject);
pools = new List<GameObject>[prefabs.Length];
for (int index = 0; index < pools.Length; index++)
{
pools[index] = new List<GameObject>();
}
}
public GameObject Get(int index)
{
GameObject select = null;
foreach (GameObject item in pools[index])
{
if (!item.activeSelf)
{
select = item;
select.SetActive(true);
break;
}
}
if (!select)
{
select = Instantiate(prefabs[index], transform);
pools[index].Add(select);
}
return select;
}
}