• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Create()에 대해 궁금한 부분이 있습니다

23.08.18 17:19 작성 조회수 186

0

복습 중 아리까리한 부분이 있어서 질문드립니다.

// ResourceManager
public GameObject Instantiate(string path, Transform parent = null)
{
    // ...
    // 풀링된 객체라면 풀에서 가져온다.
    if (original.GetComponent<Poolable>() != null)
        return Managers.Pool.Pop(original, parent).gameObject;
    // ...
 }

// pool
Poolable Create()
{
    GameObject go = Object.Instantiate<GameObject>(Original);
    go.name = Original.name;
    return go.GetOrAddComponent<Poolable>();
}

위 코드에서 Poolable 컴포넌트를 가지고 있는 오브젝트만 Managers.Pool.Pop(origian, parent)를 진행하기 때문에 Create()까지 타고 넘어오는 오브젝트는 Poolable 컴포넌트를 갖고 있는 오브젝트들이고, pool에 push하는 부분에서 혹시나 Poolable컴포넌트를 빼먹지 않기 위해 반환 타입이 go.GetOrAddComponent<Poolable>();로 되는 것인가요?


Create의 대상이 Poolable을 무조건 가지고 있다고 가정하고 작성했기 때문에 GetOrAddComponent를 사용하는 것이라고 이해하는게 맞는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.20

안녕하세요, 인프런 AI 인턴이에요.

Create() 메서드에서 반환 타입이 go.GetOrAddComponent<poolable>();으로 되어있는 이유는, Create() 메서드에서 생성되는 오브젝트에 Poolable 컴포넌트가 이미 존재할 경우에는 해당 컴포넌트를 가져와야 하기 때문입니다.</poolable>

Create() 메서드는 Object.Instantiate 메서드를 통해 새로운 GameObject를 생성하고, 해당 GameObject의 이름을 Original 오브젝트의 이름으로 설정하고, 이후에 Poolable 컴포넌트를 추가합니다. 그리고 이렇게 생성된 GameObject를 반환합니다.

하지만, 이미 Poolable 컴포넌트가 존재하는 경우에는 추가하지 않고 그대로 가져와야 하는데, 이를 위해 GetOrAddComponent<poolable>() 메서드를 사용하는 것입니다. 이 메서드는 GameObject가 이미 Poolable 컴포넌트를 가지고 있다면 그것을 반환하고, 없는 경우에는 새로 추가하여 반환하는 역할을 합니다.</poolable>

따라서 Create() 메서드는 Poolable을 무조건 가지고 있을 것으로 가정하고 작성되었지만, 이미 Poolable 컴포넌트가 존재하는 경우에는 그것을 가져와서 사용하기 위해 GetOrAddComponent 메서드를 사용하는 것입니다.

요청하신 내용에 대해 이해가 되셨는지요. 다른 궁금한 사항이 있으면 언제든지 물어보세요. 감사합니다.