[레트로의 유니티] 좀비서바이벌19 - 매치메이킹

1 minute read


매치메이킹 서버

리슨 서버 방식을 사용하여 구현한다. 다만 리슨 서버나 P2P 방식을 사용하더라도 참가할 클라이언트들이 서로를 찾아 방 하나에 모이는 과정에서 사용할 전용 서버가 필요하기 때문에 매치메이킹과 과정에서는 포톤에서 제공하는 전용 클라우드 서버를 사용한다. 이러한 전용 서버를 메치메이킹 서버라고 한다.


포톤 룸

네트워크를 통해 여러 클라이언트가 하나의 세션에 모여야한다. 포톤은 이렇게 여러 클라이언트가 모인 네트워크상의 가상의 공간을 룸이라는 단위로 부른다.

서로 떨어져 있는 클라이언트들이 매치메이킹을 통해 하나의 룸에 모이도록 한다.

포톤의 룸은 유니티의 씬이 아니라는 점에 유의해야한다. 포톤의 룸은 씬과 다른 계층에서 동작하기 때문에 플레이어들이 같은 룸에 있어도 서로 다른 씬을 로드하는 것도 가능하다.

마치 각자 무전기를 든 채 같은 주파수를 통해 서로 정보를 공유하지만 물리적인 장소가 동일하지 않은것처럼 말이다.


네트워크 권한 분리

공정한 결과를 보장하고 수치에 대한 위변조를 방지해야한다.

멀티플레이어 게임에서 보안성을 높이는 방법은 굉장히 많다. 하지만 방법과 상관없이 서버와 클라이언트 사이의 권한을 분리하여 중요한 연산은 모두 서버에 위임이라는 규칙을 가능하면 지켜야한다.

RPC

Remote Procedure Call

어떤 메서드나 처리를 네트워크를 넘어 다른 클라이언트에서 실행하는 것을 말한다.

호스트에 처리를 위임하고 호스트가 처리 결과를 클라이언트에 전파하려면 RPC를 구현해야 한다. 대부분의 멀티플레이어 API에서는 RPC가 구현되어 있다.

  • 사용자 B가 발사 버튼 누름 -> 클라이언트 B가 호스트 A로 RPC 전달 (b.Shot()) -> 호스트 A에서 b.Shot() 실행

위 처리가 실행되면 호스트 A는 자신의 게임 월드에 있는 플레이어 캐릭터 b에서 Shot()을 실행하여 총을 쏘고 결과를 동기화 한다.

그다음 모든 클라이언트가 플레이어 캐릭터 B에서 ShotEffect() 메서드를 실행하여 발사 이펙트를 재생하도록 해야한다. 이 경우 호스트 A는 게임 오브젝트 B에서 ShotEffect()를 실행하라는 신호를 RPC를 통해 스스로를 포함한 모든 클라이언트에 보낸다.

  • 호스트 A, 클라이언트 A, B, C, D에 RPC(b.ShotEffect()) 전달 -> 클라이언트 A, B, C, D 각 게임 월드에서 ShotEffect()를 실행하여 사격 효과를 재생