오늘은 유니티에서의 컴포넌트 패턴을 공부해보도록 하겠다.
컴포넌트 패턴의 장점은 두 가지 특징에서 파생된다.
✍ 게임 오브젝트는 단순한 빈 껍데기
- 몇 가지 식별 기능과 자신에게 어떠한 컴포넌트가 조립되어 있는지 알 수 있는 기능 뿐, 특별한 기능 X
✍ 컴포넌트는 스스로 움직이는 독립적인 부품
- 컴포넌트의 기능은 자신의 내부에 완결되어 있기 때문에, 다른 컴포넌트에 의존하지 않음
- 게임 오브젝트에 어떤 컴포넌트를 추가하거나 수정해도 다른 컴포넌트에 영향을 주지 않음
따라서, 새로운 기능을 가진 컴포넌트를 추가해도 기존 컴포넌트를 수정할 필요는 없다.
앞서 만들었던 Hello Unity 프로젝트의 Cube 게임 오브젝트 구성에서 컴포넌트 구조를 다시 확인해 보겠다.
여기서 확인되는 컴포넌트들은 다음과 같다.
즉, Cube 오브젝트의 외형과 기능은 본래 Cube가 지닌 것이 아니라 컴포넌트에 의해 추가된 것이다.
이 컴포넌트들을 추가하려면 인스펙터 창의 Add Component 버튼을 클릭하면되고, 컴포넌트를 삭제하려면 오른쪽의 점 세개를 클릭하거나 마우스 우클릭에서 뜨는 팝업에서 Remove Component를 선택하면 된다.
컴포넌트 구조에서는 '전체 방송'을 이용해 컴포넌트의 특정 기능을 간접적으로 실핼할 수 있다.
① MonoBehaviour란?
② 메시지 기반 방식
컴포넌트 패턴에서 컴포넌트들은 서로 관심이 없음
+ 유니티 엔진 또한 어떤 컴포넌트가 추가되었는지 모조리 파악하지 않음
= 어떤 컴포넌트의 기능을 실행시키고 싶을 때 메시지를 날리는 방식 사용
③ 브로드캐스팅
유니티의 메시지 기능을 더 자세히 알아보겠다.
다음 그림과 같은 게임 월드가 있다고 하자.
유니티가 컴포넌트들의 Dance() 기능을 일괄 실행하려 할때, 일일이 모든 컴포넌트의 Dance()를 수동으로 실행할 필요 없다. 대신 게임 세상에 Dance라는 메시지를 브로드캐스팅하면 된다.
그러면 게임 월드에 존재하는 모든 게임 오브젝트와 컴포넌트가 Dance라는 메시지를 듣게 되어, Dance()기능을 가진 모든 컴포넌트가 Dance()기능을 일괄 실행한다.
④유니티 이벤트 메서드
메시지와 브로드캐스팅은 앞으로 많이 사용할 '유니티 이벤트 메서드'가 동작하는 원리라고 한다.
예를 들어 Start() 메서드는 게임 오브젝트가 처음 활성화될 때, 유니티가 Start라고 적힌 메시지를 브로드캐스팅하기 떄문에 Start() 메서드를 수동으로 실행할 필요가 없다고 한다.
이처럼 유니티에는 이름만 똑같이 구현하면 메시지에 의해 자동으로 실행되는 메서드들이 있고, 이를 유니티 이벤트 메서드 혹은 유니티 이벤트 함수라고 한다.
이번 주에는 최종적으로 유니티의 컴포넌트 실행 방식을 정리하였다. 다음 부분은 C#프로그래밍의 기본적인 개념을 잡는 파트인데 다른 언어와 유사하게 구동되기 때문에 실습 위주로 정리하고, 바로 다음 장으로 넘어가기로 하였다.