Published 2020. 9. 23. 03:38
반응형

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을 이용하면 코드 관리가 유용하다. 코드를 접었다 펼 수 있는 범위를 지정한다.

docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-region

 

#region - C# 참조

#region - C# 참조

docs.microsoft.com

 

반응형
복사했습니다!