털털한 개발자, 긔저기의 개발공간

게임을 개발할 때 Object Pooling은 정말 많이 사용하는 기법 중에 하나다.

 

매번 오브젝트를 생성하는 것이 아니라 미리 생성해놓은 오브젝트를 재사용 하는것이기 때문에

 

cpu의 사용량을 대폭 줄여준다. 

 

 

이번 포스팅에는 UniRx에서 지원해주는 Object Pooling을 사용해 볼것이다.

 

 

1. Object Pooling 클래스 만들기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using UniRx.Toolkit;
 
public class ObjectPooling<T> : ObjectPool<T> where T : Component
{
    private readonly T _prefab;
    private readonly Transform _parentTransform;
 
    /// <summary>생성자</summary>
    /// <param name="parent">오브젝트들의 부모</param>
    /// <param name="prefab">풀링할 오브젝트 프리팹</param>
    public ObjectPooling(Transform parent, T prefab)
    {
        _parentTransform = parent;
        _prefab = prefab;
    }
 
    /// <summary>오브젝트 Rent시 없을 때 생성하는 함수</summary>
    /// <returns>생성한 오브젝트 반환</returns>
    protected override T CreateInstance()
    {
        var obj = GameObject.Instantiate(_prefab);
        obj.transform.SetParent(_parentTransform);
        return obj;
    }
}
 
 
 

여러 오브젝트를 사용하기 위해 Generic 클래스를 하나 만들어준다

 

 

2. 생성 후 사용

사용 하기

Object Pool을 생성해 주고 사용하면 된다.

 

PreloadAsync는 코루틴을 사용해서 프레임마다 몇개씩 생성할 것인지 지정해줄수도 있다.

 

그냥 가져다 사용하면 되니 얼마나 간편한가!

 

물론 더 많은 함수가 있지만 이정도의 함수로도 충분히 사용할 수 있다.

 

다음 포스팅에는 오브젝트 풀의 내부를 한번 살펴보겠다.