레트로의 유니티 게임 프로그래밍 에센스 - 3.4

Cosmos·2023년 3월 24일
0

학습 매체 : 책

책이름 : 레트로의 유니티 게임 프로그래밍 에센스

저자 : 이제민


본 내용은 해당 강의 내용을 공부하면서 정리한 글입니다.


3.4 메시지와 브로드캐스팅


  • 컴포넌트 구조에서는 '전체 방송'을 이용해 컴포넌트의 특정 기능을 간접적으로 실행할 수 있다. 이러한 전체 방송을 '브로드캐스팅'이라고 한다.

3.4.1 MonoBehaviour는 무엇인가

  • 브로드캐스팅이 가능한 원리를 이해하려면 먼저 모든 컴포넌트의 기반인 MonoBehaviour를 알아야 한다.

↑ 유니티 컴포넌트의 구조

  • 유니티의 모든 컴포넌트는 MonoBehaviour 클래스를 상속한다. MonoBehaviour 클래스는 유니티에서 미리 만들어 제공하는 클래스이며 컴포넌트에 필요한 기본 기능을 제공한다.

  • MonoBehaviour를 상속해서 만든 컴포넌트는 유니티의 제어를 받게 된다. 그러므로 컴포넌트는 유니티의 메시지를 들을 수 있다.


3.4.2 메시지 기반 방식

  • 유니티 엔진은 어떤 게임 오브젝트에 어떤 컴포넌트가 추가되었는지 그 모든 명단을 모조리 파악하지 않는다. 따라서 유니티는 컴포넌트의 어떤 기능을 실행시키고 싶을 때 '당사자를 직접 찾아가는' 방법 대신에 메시지를 날리는 방식을 사용한다.

  • 유니티는 발동시키고 싶은 기능의 이름을 담아 게임 세상에 메시지를 뿌린다. 게임 세상에 오브젝트가 100개 있다면 100개 오브젝트가 모두 메시지를 받는다.

제한 없이 모든 오브젝트에 메시지를 전파하면 성능에 좋지 않으므로 실제로는 브로드캐스팅에 적절한 필터링과 제약을 건다.

  • 메시지를 받은 오브젝트가 메시지에 명시된 기능을 가지고 있다면 해당 기능을 실행한다. 메시지에 명시된 기능을 가지고 있지 않다면 자신과 상관없는 메시지이기 때문에 메시지를 무시한다.

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

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

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

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

  • 이런 식으로 메시지를 무차별적으로 여러 오브젝트에 동시에 뿌리는 방법을 브로드캐스팅이라고 한다.

3.4.3 브로드캐스팅

  • 그림에서 Eat(), Play(), Dance() 등을 메서드라고 부르며, 각 컴포넌트가 가지고 있는 기능이다.

  • 유니티는 컴포넌트들의 Dance() 기능을 일괄 실행하려 한다. 게임 세상에 Dance라는 메시지를 브로드캐스팅한다.

  • 그러면 게임 세상에 존재하는 모든 게임 오브젝트와 컴포넌트가 Dance라는 메시지를 듣게 된다.

  • 메시지를 받은 오브젝트들은 메시지가 어디서 왔는지 따지지 않는다. Dance를 가지고 있지 않다면 메시지를 무시한다. 하지만 만약 가지고 있다면 Dance()를 실행한다. 결과적으로 단 한 번, 브로드캐스팅으로 Dance()를 가진 모든 컴포넌트가 Dance()를 실행한다.


다음 강의에서 계속~

profile
게임 개발을 목적으로 공부하고 있는 대학생입니다.

0개의 댓글