잡동사니/[2022] 회로이론

[3.2] 컴포넌트 패턴 : 조립하는 게임 세상

heylo 2022. 12. 17. 21:49

게임 엔진에서 게임 오브젝트는

게임 세상에 존재하는 하나의 물체입니다.

 

유니티는 게임 오브젝트를

컴포넌트 패턴을 사용해 만듭니다.

 

컴포넌트 패턴 혹은 컴포지션 패턴이란

미리 만들어진 부품을 조립하여 완성된 오브젝트를 만드는 방식입니다.

 

여기서 ㅣㅁ리 만들어진 부품을 컴포넌트라 부르며

컴포넌트는 저마다의 대표 기능을 가집니다.

 

컴포넌트 패턴에서 게임 오브젝트는 속이 빈 껍데기입니다.

개발자는 빈 게임 오브젝트에 컴포넌트를 조립하여 새로운 기능을 추가할 수 있습니다.


3.2.1 컴포넌트로 동물 만들기

기획자와 프로그래머가 컴포넌트로 게임 속 동물을 만든다고 가정해봅시다.

이전에는 프로그래머가 여러 필수 기능을 부모 클래스 하나에 몰아넣었습니다.

이번에는 부품마다 대표 기능을 하나씩 부여하고,

여러 부품을 게임 오브젝트에 조합하는 방식을 사용합니다.

 

[과정 01] 컴포넌트를 미리 여러 개 만들기

기획자는 게임에 등장할 모든 동물을 사전에 기획할 수 없습니다.

게임 콘텐츠는 계속 달라지고 추가되기 때문입니다.

 

따라서 프로그래머에게 동물이 아니라

사용할 다양한 종류의 부품을 미리 만들어달라고 요청하는 것이 더 현실적입니다.

 

[과정 02] 빈 게임 오브젝트 생성하기

이제 기획자는 컴포넌트들을 추가할 게임 오브젝트를 준비합니다.

먼저 기획자는 코뿔소 라는 게임 오브젝트를 생성합니다.

코뿔소 게임 오브젝트는 내부가 비어있습니다.

 

게임 오브젝트는 빈 껍데기 이며

컴포넌트를 붙일 수 있는 뼈대나 홀더 Holder 역할을 합니다.

 

 

[과정 03] 코뿔소 게임 오브젝트 완성하기

 


3.2.2 게임 오브젝트와 컴포넌트의 특징

결론적으로 컴포넌트 방식은

미리 만들어진 컴포넌트를 빈 껍데기인 게임 오브젝트에 조립하는 방식입니다.

 

컴포넌트 방식에는 세 가지 장점이 있습니다.

- 유연한 재 사용이 가능합니다.

- 기획자의 프로그래머 의존도가 낮아집니다.

- 독립성 덕분에 기능 추가와 삭제가 쉽습니다.


3.2.3 컴포넌트의 독립성

컴포넌트 패턴의 장점은 두 가지 특징에서 파생됩니다.

 

- 게임 오브젝트는 단순한 빈 껍데기

몇 가지 식별 기능과 자신에게 어떠한 컴포넌트가 조립되어 있는지 알 수 있는 기능을 제외하면

특별한 기능은 없습니다.

 

- 컴포넌트는 스스로 동작하는 독립적인 부품

컴포넌트는 자신과 같은 게임 오브젝트에 추가된 다른 컴포넌트에 관심이 없습니다.

컴포넌트의 기능은 컴포넌트 내부에 완성 (완결) 되어 있기 때문입니다.

그러므로 컴포넌트는 다른 컴포넌트에 의존하지 않습니다.

 

즉, 게임 오브젝트에 어떤 컴포넌트를 마음대로 조립하거나 빼도

다른 컴포넌트가 망가지지 않습니다.

 

현재 Player 레임 오브젝트와 NPC 게임 오브젝트는

외형을 그려주는 렌더 컴포넌트와

물리 컴포넌트를 가지고 있습니다.

 

이때 Player나 NPC에서 물리 컴포넌트를 제거하면

물리기능만 사라진다는 점에 주목합니다.

 

물리 컴포넌트가 제거되더라도

게임 오브젝트 자체는 전혀 망가지지 않습니다.

 

 

 

여기서 Player 게임 오브젝트에 입력 감지 컴포넌트를 추가하고

NPC 게임 오브젝트에 AI 컴포넌트를 추가했다고 합시다.

 

각자 새로운 기능을 가진 컴포넌트를 추가했지만

기존 컴포넌트를 수정할 필요는 없습니다.

 

결론적으로 컴포넌트 방식에서는

새로운 기능을 추가하거나 삭제할 때

기존 기능이 망가질까봐 걱정할 필요가 전혀 없습니다.