백지부터 시작하는 이세계 코딩 생활
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.
[Unity3D] Programming - 오브젝트 풀링 기법 구현하기
Programming - 오브젝트 풀링 기법 작성 기준 버전 :: 2019.2 프로그래밍에서 오브젝트를 생성하거나 파괴하는 작업은 꽤나 무거운 작업으로 분류된다. 오브젝트 생성은 메모리를 새로 할당하고 리소
wergia.tistory.com
chameleonstudio.tistory.com/67
유니티 오브젝트 복제 / 복사하기 Instantiate 총알쏘기
해당 티스토리 페이지는 필자가 유니티 C# 개발을 하면서 학습한 내용들을 기록하고 공유하는 페이지입니다 ! - 틀린 부분이 있거나, 수정된 부분이 있다면 댓글로 알려주세요 ! - 해당 내용을 공
chameleonstudio.tistory.com
'백지부터 시작하는 이세계 유니티 생활 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 |