Unity

컴포넌트 패턴

게임 개발 2024. 2. 5. 11:38

 

 

컴포넌트 패턴이란?

 

컴포넌트 패턴 혹은 컴포지션(Composition) 패턴이란 미리 만들어진 부품을 조립하여

완성된 오브젝트를 만드는 방식이다.

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

컴포넌트는 저마다의 대표 기능을 지닌다.

 

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

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

 

상속기능에만 의존하여 자식 클래스를 만들다 보면

빼야할 기능과 추가해야 할 기능이 갈리게 된다.

프로그래머만이 부모 클래스를 확장하여 새로운 자식 클래스를 만들게 된다면

프로그래머와 기획자 혹은 디자이너 팀이 번거로울 것이다..

때문에 상속에만 의존하여 게임 개발을 할 때,

대표적으로 생기는 문제점은 다음과 같다.

 

1. 오히려 코드를 재사용하기 힘든 경우가 생길 수 있다.

2. 기획자가 새로운 으보젝트를 만드려면 프로그래머에게 의존해야 한다.

 

이러한 문제를 해결하려면 컴포넌트 패턴을 이용하는 것이 유용하다.

 

결론적으로 컴포넌트 방식은 미리 만들어진 컴포넌트를

빈 껍데기인 게임 오브젝트에 조립하는 방식이다.

 

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

 

  • 유연한 재사용이 가능

상속만을 사용한 경우 부모 클래스의 불필요한 기능까지 모두 가져오기 때문에

코드 재사용이 힘든 경우가 있다.

컴포넌트 방식에서는 원하는 기능을 가진 컴포넌트만 선택적으로 골라 쓸 수 있다.

 

  • 기획자의 프로그래머 의존도가 낮아진다

기획자는 미리 만들어진 컴포넌트를 조립하여 게임 오브젝트를 만들 수 있다.

따라서 기획자가 프로그래머에게 덜 의존한다.

 

  • 독립성 덕분에 기능 추가와 삭제가 쉽다

겉으로는 간단해 보이는 수정 사항에도 프로그래머가 두려워하는 모습을 가끔 볼 수 있다.

코드의 한 부분만 수정하더라도 관련된 여러 부분의 코드가 망가질 수 있기 때문이다.

하지만 컴포넌트 방식에서는 어떤 기능을 추가하거나 삭제할 때

다른 기능이 망가지지 않기 때문에 그런 걱정이 줄어든다.

 

 

 

컴포넌트의 독립성

 

 

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

 

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

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

특별한 기능은 없다.

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

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

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

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

즉, 게임 오브젝트에 어떤 컴포넌트를 마음대로 조립하거나 빼도 다른 컴포넌트가 망가지지 않는다.

 

<출저> 레트로 유니티 게임 프로그래밍 에센스
<출저> 레트로 유니티 게임 프로그래밍 에센스

 

각각의 클래스에 새로운 기능을 가진 컴포넌트를 추가했지만

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

결론적으로 컴포넌트 방식에는 새로운 기능을 추가하거나

삭제할 때 기존 기능이 망가질까봐 걱정할 필요는 없다.

 

 

 

유니티 에디터에서의 컴포넌트

 

 

유니티 엔진에서도 언리얼 엔진에서와 같이

기본적인 도형들에 추가되는 기능이 있다.

cube를 예를 들어 유니티 cude 오브젝트에 들어가는 컴포넌트는 다음과 같다.

 

이름 내용
트랜스폼 (Transform) 게임 오브젝트의 위치와 크그, 회전을 지정한다.
메시 필터 (Mesh Filter) 오브젝트의 외곽선을 지정한다.
메시 렌더러 (Mesh Renderer) 메시를 따라 색을 채워 그래픽 외형을 그린다.
박스 콜라이더 (Box Collider) 다른 물체가 부딫칠 수 있는 물리적인 표면을 만든다.
리지드바디 (Rigidbody) 게임 오브젝트가 물리 엔진의 통제를 받게 한다. (Add Component)를 통해 추가

 

 

 

이 외에도 Add Component를 통해 컴포넌트를 추가해 줄 수 있다.

'Unity' 카테고리의 다른 글

코루틴  (0) 2024.02.26
Instantitate()와 Destroy()함수  (0) 2024.02.15
트리거 콜라이더  (1) 2024.02.11
유니티 기본 설정 값 작업  (1) 2024.02.11
Unity 기본 설정  (0) 2024.02.05