레트로 교제 서버 수업

김동현·2022년 9월 13일
0

Unity에서의 서버(포톤)

로컬 권한 검사

내 입력은 내 캐릭터에서만 작동되어야지 리모트 플레이어까지 작동되면 안된다. 오브젝트가 로컬권한을 가지고 있는지 검사해야 합니다.

서버의 종류

전용서버

  • 서버의 모든 자원이 온전히 네트워크 서비스를 유지하는데 사용되며, 서버가 플레이어로서 게임에 직접 참여하지 않는 형태
    • 전용서버는 다른 서버 방식에 비해 고정비용이 많이 발생한다.

리슨서버

  • 전용 서버가 없는 대신 플레이어 클라이언트 중 하나가 서버 역활을 한다.
  • 게임에 플레이어로 참가하기 때문에 'Play as Host' 라고 부른다.
  • 리슨 서버 방식에서는 호스트 플레이어의 컴퓨터 성능에 따라 네트워크 품질이 크게 달라 진다.
  • 호스트가 게임을 종료 할 경우 진행 중인 게임을 일시 정지하고 남은 클라이언트 중에서 새로운 호스트를 선정하는 절차가 필요하다.

P2P

  • 게임에 참가한 클라이언트 모두가 호스트의 역활을 겸합니다.
  • 클라이언트가 각자 자신의 월드에서 자신의 담장 연산을 실행하고 다른 클라이언트에 결과를 전파합니다.
  • 서버 유지비용 또한 발생하지 않으며 클라이언트끼리 직접 연결되기 때문에 클라이언트 수가 적은 경우에 한해서 다른 방법보다 네트워크 반응 속도가 빠릅니다.
  • 참가자가 증가할수록 반응 속도가 눈에 띄게 느려집니다. (16명 상한성 -> 이것도 많다)
  • 수치 변조(해킹)에 제일 취약합니다.
  • 기본적인 서버의 구조는 호스트가 있으면 중요한 연산과 데이터는 호스트에서 관리하고, 클라이언트는 호스트의 실행 결과만 받기 때문에 클라이언트가 중요한 연산과 수치를 위조하는 겻이 상대적으로 어렵다.
  • 하지만 P2P 방식에서는 각 클라이언트가 연산을 실행하고 서로 동기화 하기 때문에 특정 중요 수치를 위조하여 다른 클라이언트에 전파할 위험이 크다.

매치메이킹 서버

  • 참가할 클라이언트들이 방 하나에 모이는 과정에서 사용할 서버
    • ex) 카트라이터의 게임방

포톤 룸

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

네트워크 권한 분리

  • 네트워크 게임은 공정한 결과를 보장하고 수치에 대한 위변조를 방지해야 한다.
  • 서버와 클라이언트 사이의 권한을 분리하여 중요한 연산은 모두 서버(호스트)에 위임 하라는 규칙을 지켜야 한다.

호스트에 위임

  • 호스트에 위임하는 두 가지 대표적인 이유
    • 동기화에 오차가 존재하는 경우 기준이 되는 월드를 정하기 위해
    • 클라이언트의 변조나 위조 행위를 막기 위해
  • 네트워크 동기화는 전송 속도나 패킷 손실이라는 현실적인 문제 때문에 완벽하지 않다.
  • 호스트가 아닌 클라이언트의 동작은 동작을 하는 척만 하고 실제 동작흔 호스트에서 일어난다.
  • 위변조가 일어난 클라이언트의 비정상적인 동작은 호스트에서는 적용되지 않는다.

RPC

  • 호스트에 처리를 위임하고 호스트가 처리 결과를 클라이언트에 전파하려면 RPC(remote procedure call, 리모트 프로시저 콜)를 구현해야 합니다.
  • [PunRPC]로 선언된 메소드는 다른 클라이언트에서 원격 실행될 수 있습니다.

좀비 서바이벌 네트워크 실습

PUN

  • PhotonNetwork
    • 포톤과 관련된 여러가지 기능을 제공
      • 매치매이킹 / 방 생성 / 방 접속 등등
    • API
      • ConnectUsingSettings() : 매치메이킹 서버에 접속한다.
        • PhotonServerSettings 스크립터블 오브젝트에서 서버와 관련된 여러 가지 데이터 설정 가능
      • JoinRandomRoom() : 현재 접속 가능한 방 중 임의로 접속한다.
      • LoadLevel() : 방에 있는 모든 클라이언트를 특정 씬으로 이동시킨다.
      • CreateRoom() : 방을 생성한다.
  • MonoBehaviorPunCallbacks
    • MonoBehaviour에 관련된 콜백 메소드를 제공
  • PhotonView
  • MonoBehaviourPun
    • photonView 제공
    • photonView 컴포넌트가 추가되어야 함
profile
해보자요

0개의 댓글