• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

유니티에서 물체와의 충돌은 누가 감지하고 브로드캐스팅은 누가하는건가요?

19.07.13 17:50 작성 조회수 299

1

소코반제작챕터에서 충돌처리강의를 듣다가 궁금증이 생겨 질문드립니다.

일단 제가 강의에서 이해한것은 아래와 같습니다.

오브젝트는 자신이 충돌한 사실을 모르고 일단 오브젝트끼리 충돌을 하면 유니티가 충돌했다는 메시지를 브로드캐스팅하고 메시지에 해당되는 컴포넌트가 OnTriggerEnter함수를 실행시킨다. 그리고 이때 패러미터는 유니티가 알아서 충돌한 상대방을 넣어준다.

근데 여기서 이해 안되는 것이 2가지 있습니다.

 

 

먼저 이벤트(ex: 오브젝트끼리의 충돌)를 감지하는 것이 누구인지에 대한 것입니다.

일단 오브젝트끼리 충돌해도 오브젝트는 자신이 충돌한 사실을 모른다고 하셨는데 그럼 충돌한 사실은 누가 감지하는건가요? 일단 충돌했다는 메시지를 브로드캐스팅을 하려면 충돌했다는 것을 감지할 어떤 주체가 있어야 하는데 그게 무엇인지 잘 모르겠습니다.

 

그리고 두번째로 이해안되는 것은 브로드캐스팅을 하는 것이 누구인지에 대한 것입니다.

브로드캐스팅은 어떤 이벤트를 감지한 무언가(여기선 그 무언가를 a라고 하겠습니다. 그 무언가가 정확이 무엇인지 묻는 것이 첫번째 질문입니다.)가 직접하는 건가요? 아니면 브로드캐스팅만을 전문적으로 하는 어떤 B가 있어서 이벤트를 감지한 a가 브로드캐스팅을 하는 그 B에 그 이벤트가 일어났다는 메시지를 전달하고 메시지를 받은 B가 브로드캐스팅을 하는건가요? 제가 지금까지 강의를 들으면서 이해한 바에 따르면 그 B를 유니티자체라고 생각하고 있습니다.

답변 1

답변을 작성해보세요.

2

해당 비디오는 이전에 만들진데다, 설명을 쉽게 하기 위해 생략한 부분이 있습니다. (해당 비디오는 업데이트 예정입니다)

사실 충돌을 감지하고 메시지를 전파하는 것은 Rigidbody 컴포넌트입니다. 따라서 충돌하는 두 게임 오브젝트 중 하나라도 Rigidbody 컴포넌트가 있어야 충돌 감지가 됩니다.

Rigidbody 컴포넌트는 자신의 게임 오브젝트가 물리 엔진의 제어를 받게 하고, 유니티에서 동작중인 물리 엔진과 통신하기 때문에, 물리 처리를 감지하고 어떤 물리 사건에 맞춰 특정 처리를 실행할 수 있기 때문입니다.

그리고 MonoBehaviour를 가진 컴포넌트는 유니티의 메시지를 감지할 수 있습니다.

즉 A와 B가 충돌한 경우,  예를 들어 A가 Rigidbody 컴포넌트를 가지고 있다면 A의 Rigidbody 컴포넌트가 충돌을 감지하고, A게임 오브젝트와 B 게임 오브젝트에게 각각 충돌 메시지를 전파합니다.

따라서 A의 Rigidbody 컴포넌트는 물리 충돌을 감지했지만, A 게임 오브젝트의 Rigidobdy 컴포넌트가 메시지를 전파하기 전까지는, A 게임 오브젝트와 A 게임 오브젝트의 Rigidbody를 제외한 다른 컴포넌트들, B 게임 오브젝트와 B 게임 오브젝트의 컴포넌트들은 충돌 사실을 모르지만, '어쨌든' 메시지를 받기 때문에 메시지를 통해 충돌 사실을 알게 되는 것입니다.