풀링을 직접 구현하려고하면 굉장히 귀찮은데 잘 구현되어있는 에셋이 있어서 가져왔다.


에셋 이름은 EZ Object Pools.

무료로 사용할 수 있다.

자세한 사용법은 에셋 안에 있는 pdf파일을 참고하기를 바란다.



1. 우선 풀링을 관리할 오브젝트에 EZ Object Pool 스크립트를 넣어준다. 

Template에는 풀링할 오브젝트를 넣는다.

Pool Name은 풀의 이름을 입력,

Auto Resize는 풀링한 오브젝트를 전부 사용중일때 추가로 더 생성할건지 여부,

Pool Size는 오브젝트를 생성할 개수,

Instantiate On Awake를 체크하면 시작과 동시에 오브젝트가 생성된다.

Shared는 공유를 원하면 체크하면 된다.



아래와 같이 스크립트로 풀을 생성할 수도 있다.

1
2
3
4
5
EZObjectPool objectPool; 
 
void Awake ()  { 
    objectPool = EZObjectPool.CreateObjectPool(template, "TEST"100falsetruefalse);  
}
cs




2. 오브젝트를 생성할 곳에서 위의 EZObjectPool 스크립트를 찾는다.

스크립트를 찾은 후에는 TryGetNextObject(위치, 회전) 명령어를 통해 풀에서 오브젝트를 가져오면 끝이다.

1
2
3
4
5
6
7
8
9
10
11
public EZObjectPool objectPool;
    
// Update is called once per frame
void Update () {
    fTime += Time.deltaTime;
    if(fTime > 1.0f)
    {
        objectPool.TryGetNextObject(transform.position, Quaternion.identity);
        fTime = 0;
    }
}
cs

예시처럼 public으로 선언해서 가져와도 될 것이고, 오브젝트를 찾아서 스크립트를 찾아도 될 것이다.


오브젝트를 꺼내온 이후 접근이 필요하다면 아래와 같이 사용하면 된다.

1
2
3
4
GameObject outObject; 
 
if(objectPool.TryGetNextObject(position, rotation, out outObject)) 
//Do stuff with outObject }
cs




실행하면 아래처럼 오브젝트가 10개 생성되고 TryGetNextObject 명령어로 잘 가져온다.


Posted by misty_
,