백지부터 시작하는 이세계 코딩 생활

Object Pool 본문

백지부터 시작하는 이세계 유니티 생활 since 2020

Object Pool

조아덕 2020. 12. 4. 17:03
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.

wergia.tistory.com/203

 

[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
Comments