반응형
728x170
Object Pooling은 많이 들어봤고
디자인 패턴 중에 가장 이해하기 쉬운 것이라고 생각한다.
[Game Developer, 게임개발자/디자인패턴] - Object Pool, 오브젝트 풀, 객체 풀 [디자인패턴](최적화)
더군다나 Unity 2021에서는 이제 엔진에서 지원한다.
그래서 더 좋다.
공부할 때도 유니티의 native에서 지원하는 함수들을 바탕으로 하면 될 것이다.
1. ObjectPool을 이용하는 주체
using UnityEngine;
using UnityEngine.Pool;
public class Launcher : MonoBehaviour {
[SerializeField] Bullet bulletPrefab;
private IObjectPool<Bullet> bulletPool;
private void Awake()
{
//(생성하는 함수, Get, Release, Destroy, Max)
//Pool의 크기를 3으로 유지하는 것이다. => 최종적으로는 3개만 풀에 저장함.
bulletPool = new ObjectPool<Bullet>(
CreateBullet,
OnGet,
OnRelease,
OnDestroy,
maxSize : 3
);
}
private Bullet CreateBullet()
{
Bullet bullet = Instantiate(bulletPrefab); //생성
bullet.SetPool(bulletPool); //풀 설정
return bullet;
}
//=> Get이 실행될 때 실행되는 함수 => element가 parameter가 됨
private void OnGet(Bullet bullet))
{
bullet.gameObject.SetActive(true);
}
//=> Release가 실행될 때 실행되는 함수 element가 실행함.
private void OnRelease(Bullet bullet))
{
bullet.gameObject.SetActive(false);
}
private void OnDestory(Bullet bullet))
{
Destroy(bullet.gameObject)
}
private void Update() {
if (Input.GetKeyDown(KeyCode.Space))
{
bulletPool.Get();
}
}
}
2. 대상 Object
using UnityEngine;
using UnityEngine.Pool;
public class Bullet : MonoBehaviour {
[SerializeField] Vector3 speed;
//오브젝트 자체에서 어떤 Pool에 들어가야 하는지 알고 있어야함.
private IObjectPool<Bullet> bulletPool;
//Pool의 정보는 Bullet이 반환될 때 같이 불러준다.
private SetPool(IObjectPool<Bullet> pool)
{
bulletPool = pool;
}
private void Update() {
transform.position += speed * Time.deltaTime;
}
//화면에서 사라지면 Pool로 다시 집어 넣는다.
private void OnBecameInvisible() {
bulletPool.Release(this);
}
}
최적화 중에 이것보다 쉬운 최적화는 없다고 할 수 있고 이만큼 성능이 눈에 띄게 좋아지는 것도 없다.
오브젝트 풀을 있는 것을 이용해도 좋지만
시간이 난다면 만들어보는 것도 좋다.
아니 우선 혼자 만들어보고 저거를 쓰는 것이 좋겠다.
728x90
반응형
그리드형
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
유니티 플레이 중 Recomplie 막는 방법 [Unity] (0) | 2022.06.12 |
---|---|
구글 애드몹, GoogleAdmob id 빌드할 때마다 사라짐 [유니티, Unity] (0) | 2022.06.12 |
Observer Pattern를 Unity에서 이용하기 (0) | 2022.06.05 |
Convert 그리고 Parse의 문화권 문제 [C#] (0) | 2022.05.22 |
RectTransform과 Transform의 이해 (0) | 2022.04.17 |