백지부터 시작하는 이세계 코딩 생활
Object Pool 본문
Object Pool
Object를 관리하는 저장소
런타임 중에 Object를 생성하는 작업이나 소멸시키는 작업은 프로그램에 부담을 줄 수 있다.
따라서 필요한 Object를 미리 만들어 Pool 에서 관리하여 생성과 소멸시키는 과정에서의 부담을 줄일 수 있다.
ex ) 적군 생성, 투사체 (총알) 등등..
보통 반복적으로 생성되는 Object 들을 많이 관리한다. 미리 만들어둔 Object들은 필요시에 호출되며 호출이 끝나면 다시 Object Pool 로 반납 (다시 수납)되는 알고리즘을 가진다. 만약, 미리 만들어둔 Object들 보다 더 많은 Object 들이 필요해지면 추가적으로 생성된다.
Queue (큐)
Object Pool 은 일종의 Object 저장소이다. 따라서 Object들을 저장할 수 있는 공간이 필요하며, 자료구조인 Queue를 사용하여 이를 처리할 수 있다. 큐는 선입선출 ( FIFO ) 특징을 갖는 자료구조이다. 값을 SET 하기 위해 Enqueue 함수를 사용하며 GET 하기 위해서 Dequeue함수를 사용한다.
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public static ObjectPool Instance;
public GameObject poolingPrefab;
Queue<Bullet> poolingQueue = new Queue<Bullet>();
private void Awake()
{
Instance = this;
Initialize(40);
}
private void Initialize(int _initCount)
{
for (int i = 0; i < _initCount; i++)
{
poolingQueue.Enqueue(CreateBullet(Vector3.zero));
}
}
public Bullet CreateBullet(Vector3 _posBullet)
{
Bullet newBullet = Instantiate(poolingPrefab).GetComponent<Bullet>();
newBullet.gameObject.SetActive(false);
newBullet.transform.position = _posBullet;
newBullet.transform.SetParent(transform);
return newBullet;
}
... 중략 ...
}
Object를 미리 생성해 두는 과정
Instantiate
특정 Object 를 복제해주는 Object 클래스의 내장함수. Prefab 매개변수를 받아서 처리한다.
Ref.
chameleonstudio.tistory.com/67
'백지부터 시작하는 이세계 유니티 생활 since 2020' 카테고리의 다른 글
키워드 this 와 Base (0) | 2020.12.09 |
---|---|
Inheritance (0) | 2020.12.09 |
Memory 구조 (0) | 2020.12.04 |
Shader (0) | 2020.12.01 |
Angular Drag, Mass, Drag (0) | 2020.12.01 |
Comments