컴포넌트 구조에서는 '전체 방송'을 이용해

컴포넌트의 특정 기능을 간접적으로 실행할 수 있습니다.

이러한 전체 방송을 '브로드캐스팅' 이라고 부릅니다.

 

3.4.1 MonoBehaviour 는 무엇인가?

브로드캐스팅이 가능한 원리를 이해하려면

먼저 모든 컴포넌트의 기반인 MonoBehaviour를 잘 알아야 합니다.

 

유니티의 모든 컴포넌트는 MonoBehaviour 클래스를 상속합니다.

MonoBehaviour 클래스는 유니티에서 미리 만들어 제공하는 클래스이며

컴포넌트에 필요한 기본 기능을 제공합니다.

 

즉, MonoBehaviour 를 상속한 클래스는

게임 오브젝트에 컴포넌트로서 추가될 수 있습니다.

 

MonoBehaviour 를 상속해서 만든 컴포넌트는

유니티의 제어를 받게 됩니다.

그러므로 컴포넌트는 유니티의 메시지를 들을 수 있습니다.


3.4.2 메시지 기반 방식

컴포넌트 패턴에서 컴포넌트들은 서로 관심이 없습니다.

어떤 컴포넌트는 같은 게임 오브젝트에 추가된 다른 컴포넌트가 일부러 찾아내기 전에는 알 수 없습니다.

마찬가지로 유니티 엔진 또한 

어떤 게임 오브젝트에 어떤 컴포넌트가 추가되었는지 

그 모든 명단을 모조리 파악하지 않습니다. 

 

따라서 유니티는 컴포넌트의 어떤 기능을 실행시키고 싶을 때

당사자를 직접 찾아가는 방법 대신에

메시지를 날리는 방식을 사용합니다.

유니티는 발동시키고 싶은 기능의 이름을 담아 

게임 세상에 메시지를 뿌립니다. 

게임 세상에 오브젝트가 100개 있다면

100개 오브젝트가 모두 메시지를 받습니다.

메시지를 받은 오브젝트가 

메시지에 명시된 기능을 가지고 있다면 

해당 기능을 실행합니다. 

 

메시지에 명시된 기능을 가지고 있지 않다면 

자신과 상관없는 메시지이기 때문에

메시지를 무시합니다.

제한 없이 모든 오브젝트에 메시지를 전파하면 성능에 좋지 않으므로

실제로는 브로드캐스팅에 적절한 필터링과 제약을 겁니다.


메시지 방식은 다음과 같은 특징이 있습니다.

• 메시지를 보내는 쪽은 누가 받게 될지 신경 쓰지 않습니다. 

• 메시지를 받은 쪽은 누가 보냈는지 신경 쓰지 않습니다. 

• 메시지를 받았을 때 메시지에 명시된 기능을 가지고 있다면 실행합니다. 관련 없다면 무시합니다.

메시지 기반 방식은 

누가 메시지를 보냈는지, 누가 받게 될지 신경 쓰지 않기 때문에 

컴포넌트의 독립성을 유지할 수 있습니다. 

 

이런 식으로 메시지를 무차별적으로 여러 오브젝트에 동시에 뿌리는 방법을 

브로드캐스팅이라고 합니다.


3.4.3 브로드캐스팅

유니티가 메시지로 원하는 기능을 동작시키는 방법을 더 자세히 알아봅시다.

다음 그림처럼 게임 월드에 컴포넌트들이 추가된 

3개의 게임 오브젝트가 있다고 합시다.



그림에서 Eat(), Play(), Dance() 등을 메서드라고 부르며, 

각 컴포넌트가 가지고 있는 기능입니다. 

 

유니티는 컴포넌트들의 Dance () 기능을 일괄 실행하려 합니다. 

하지만 일일이 모든 컴포넌트를 찾아가 Dance () 를 수동으로 실행할 필요는 없습니다. 

대신 게임 세상에 Dance라는 메시지를 브로드캐스팅합니다.
그러면 게임 세상에 존재하는 모든 게임 오브젝트와 컴포넌트가 

Dance라는 메시지를 듣게 됩니다.

메시지를 받은 오브젝트들은 메시지가 어디서 왔는지 따지지 않습니다. 

만약 메시지에 표시된 Dance를 가지고 있지 않다면 메시지를 무시합니다. 

하지만 만약 어떤 컴포넌트가 메시지에 표시된 

Dance와 같은 이름의 Dance() 기능을 가지고 있다면 실행합니다. 

 

결과적으로 단 한 번 브로드케이팅으로 

Dance()를 가진 모든 컴포넌트가 

Dance ()를 실행하게 합니다.





브로드캐스팅을 들은 컴포넌트들이 Dance() 실행

브로드캐스팅은 특정 오브젝트를 직접 가리키지 않고 원하는 기능을 수행하게 합니다.

브로드캐스팅은 유니티에서 어떤 컴포넌트가 다른 컴포넌트에 의존하지 않고

독립적으로 동작할 수 있는 구조를 가질 수 있는 이유이기도 합니다.


3.4.4 유니티 이벤트 메서드

메시지와 브로드캐스팅은 앞으로 많이 사용할 

Start(), Update(), OnTriggerEnter() 등의 유니티 이벤트 메서드가 동작하는 원리입니다

(메서드는 4장에서 자세히 설명합니다)

예를 들어 Start() 메서드는 

게임 오브젝트가 처음 활성화될 때 자동으로 한 번 실행됩니다. 

 

게임 오브젝트가 활성화될 때 

유니티가 해당 게임 오브젝트에 Start 라고 적힌 메시지를 브로드캐스팅하기 때문입니다. 

따라서 Start () 메서드를 수동으로 실행할 필요가 없습니다.

유니티에는 이런 식으로 이름 철자만 똑같이 구현해두면 

메시지에 의해 자동으로 실행되는 메서드들이 있습니다. 

이러한 메서드를 유니티 이벤트 함수 또는 유니티 이벤트 메서드라고 합니다.


컴포넌트 구조에서는 미리 만들어진 컴포넌트를

게임 오브젝트에 조립하여 원하는 기능을 구현합니다.

 

그리고 유니티는 미리 만들어진 수많은 컴포넌트를 제공합니다.

 

따라서 유니티를 사용하면 원하는 기능을 바닥부터 직접 만드는 대신

전체 게임 로직에 집중할 수 있습니다.

'잡동사니 > [2022] 회로이론' 카테고리의 다른 글

[4.2] 함수 (메서드) 개념 잡기  (0) 2022.12.21
[4.1] 변수 개념 잡기  (0) 2022.12.21
[백준/Java] 숫자의 합  (0) 2022.12.18
[11] 리피터와 허브의 구조  (0) 2022.12.18
[10] 케이블의 종류와 구조  (0) 2022.12.18

+ Recent posts