반응형
Object Pooling
Pooling할 Object / Pooling하지 않을 Object를 Poolable Component로 구분한다.
Pool Manager는 Resource Manager를 보조하는 개념으로써, 기존 Resource Manager의 문제점을 개선해야 한다.
public GameObject Instantiate(string path, Transform parent = null)
{
// 1. original 이미 들고 있으면 바로 사용
GameObject prefab = Load<GameObject>($"Prefabs/{path}");
if (prefab == null)
{
Debug.Log($"Failed to load prefab: {path}");
return null;
}
// 2. 혹시 pooling된 애가 있을까?
GameObject go = Object.Instantiate(prefab, parent);
go.name = prefab.name;
//int index = go.name.IndexOf("(Clone)");
//if (index > 0)
// go.name = go.name.Substring(0, index);
return go;
}
public void Destroy(GameObject go)
{
if (go == null)
return;
// 만약 pooling이 필요한 아이라면 -> Pooling Manager에게 의탁
Object.Destroy(go);
}
Pool Manager 내부에서 Pool 클래스를 따로 생성하여 각 종류별로 관리하게끔 구현한다.
#region, #endrigion을 이용하면 코드 관리가 유용하다. 코드를 접었다 펼 수 있는 범위를 지정한다.
#region - C# 참조
#region - C# 참조
docs.microsoft.com
반응형