TIL 1227 미니 프로젝트 마무리, 오브젝트 풀링

강성원·2023년 12월 27일
0

TIL 오늘 배운 것

목록 보기
4/69
post-thumbnail

오브젝트 풀링

오브젝트 풀링이란 어느 장소(Pool)에 미리 생성한 오브젝트를 필요할 때 갖다 쓰고 다시 넣어놓는 방법이다.

왜 이런 방식을 사용할까? 그냥 생성하고 삭제만 잘 해주면 장땡 아닌가?

오브젝트를 생성할 땐 새로 메모리를 새로 잡아주고 리소스를 끌어오거나 사용자가 붙여준 스크립트 등 여러 행동이 동반된다.
오브젝트를 소멸시킬 때에도 C#에서는 기본적으로 가비지 컬렉팅을 해주기 때문에 소멸 횟수가 많아질수록 CPU는 하는 일이 많아진다.

공부한 소스코드의 내용을 정리해본다.

public class PoolManager : MonoBehaviour
{
  public GameObject[] prefabs;
  List<GameObject>[] pools;

  private void Awake()
  {
      pools = new List<GameObject>[prefabs.Length];

      for(int i=0; i<pools.Length; ++i)
      {
          pools[i] = new List<GameObject>();
      }
  }
  public GameObject Get(int index)
  {
      GameObject select = null;

      foreach(GameObject item in pools[index])
      {
          if(!item.activeSelf)
          {
              Debug.Log("찾았다.");
              select = item;
              select.SetActive(true);
              break;
          }
      }

      if(!select)
      {
          Debug.Log("못찾았다.");
          select = Instantiate(prefabs[index], transform);
          pools[index].Add(select);
      }

      return select;
  }
}

pools는 리스트의 배열이다. pools[index]는 오브젝트들이 들어있는 리스트를 가리킨다.

foreach문에서 item은 pools[index]라는 하나의 리스트(리스트배열X)를 순회할 때의 오브젝트이다.
오브젝트의 활성화 여부를 체크하고 비활성화 된 것을 활성화시키고 리턴한다.

if문에서는 풀에 비활성 객체가 없는 것이다
prefabs[index]를 생성하고 pools[index]에 Add 해준다.
그리고 생성한 객체의 참조를 반환해준다.

회고

어제부터 시작한 병합, 자잘한 버그의 수정을 거쳐서 모든 과정을 끝냈다.
협업의 첫 발을 디뎌보자는 방향에 잘 맞게 마무리가 된 것 같다.
팀장직, 발표 등을 먼저 나서서 맡아주신 팀장님과 맡은 부분 이상으로 열심히 해주신 팀원 분들 덕에 배운 것도 많았고, 앞으로 어떤 태도로 임해야할지 생각해볼 수 있었다.

profile
개발은삼순이발

0개의 댓글