포톤, 네트워크

suhan cho·2022년 11월 17일
0

네트워크 동기화

  • 4인 플레이어의 캐릭터는 총 16개이다.
  • 게임월드를 생각하면 평행우주가 4개 존재
    -> 클라이언트 A의 플레이어 캐릭터 a와 클라이언트 B의 플레이어 캐릭터 a는 서로다른 오브젝트지만 네트워크 관리자는 이 둘을 동일한 식별자 부여
    (네트워크 연결 되어있는 동안은 동일 오브젝트)

로컬과 리모트

  • 로컬 오브젝트 : 주도권이 자신에게 있음
  • 리모트 오브젝트 : 주도권이 네트워크 너머의 타인에게 있음

로컬권한검사

  • 플레이어A의 조작 입력은 로컬 플레이어 캐릭터인 a에만 반영되어야 한다.
    -> 로컬 권한을 가지고 있는지 검사해야 한다.
  • if문을 통해 로컬이면 사용자 입력을 받고 아니면 안 받도록 한다
    -> 나머지는 동기화를 통해서 움직인다.

게임 서버의 종류

  • 서버-클라이언트 방식
  • 서버: 클라이언트들이 참가할 수 있는 네트워크 공간 제공
  • 클라이언트: 서버에 참가하여 게임을 플레이하는 컴퓨터
    -> 전용서버, 리슨서버, P2P가 있다

전용서버

  • 서버의 모든 자원이 온전히 네트워크 서비스를 유지하는 데 사용, 서버가 플레이어로서 게임에 직접 참가하지 않음
  • 참여 언제든지 가능, 쾌적 환경 클라이언트에 제공, 단 고정비용 크다

리슨서버

  • 전용서버가 없고 플레이어 클라이언트 중 하나가 서버 역할
  • 서비스 유지비용 적다 가까운 플레이어들 끼리는 속도 빠를 수 있다
  • 호스트 플레이어 성능에 따라 네트워크 달라진다

P2P

  • 참가한 클라이언트들 모두가 호스트 역할 겸한다. 클라이언트들이 특정 단일 호스트에 참가하는 방식이 아니라 서로 직접 연결된 형태
  • 연산을 독점하는 특정 호스트가 없다
  • 호스트가 게임 도중 접속 종료시 호스트 교체 과정 불필요
  • 참가자가 늘 수록 반은 속도가 느려진다(통상16명 참가자 상한선)
  • 수치 변조에 취약
    -> 호스트가 있으면 중요 연산을 호스트가 관리하는데 각 클라가 연산 실행하고 동기화 하기에 수치 위조하여 전파할 위험이 있다

매치메이킹 서버

  • 리슨서버나 P2P를 사용하더라도 참가할 클라들의 서로를 찾아 방 하나에 모이는 과정에 사용할 전용 서버가 필요하며 이를 매치메이킹 서버라 한다.
  • RPG게임은 대부분 전용서버, 반면 플레이어들 모여 레이드나 데스매치 종류는 매치메이킹은 전용서버 룸이 구성되고 라운드 시작시에는 리슨 서버 방식 사용

포톤 룸

  • 네트워크를 통해 여러 클라를 하나의 세션에 모아야한다. 포톤은 이렇게 모인 가상의 공간을 룸이라고 한다

네트워크 권한 분리

  • 서버와 클라 사이의 권한을 분리하여 중요한 연산은 모두 서버에 위임하는 규칙을 가능하면 지켜야한다.(게임 승패와 관련된 기능들)

호스트 위임

  • 동기화에 오차가 존재하는 경우 기준이 되는 월드를 정하기 위해
  • 클라의 변조나 위조 행위를 막기 위해
    • 네트워크 동기화는 전송속도나 패킷 손실이라는 현실적인 문제때문에 완벽하지 않다
      -> 이때문에 동일한 행위에 대한 결과가 클라마다 다른 경우 어떻게 해야할지
      -> 위조하고 네트워크를 넘어 다른 클라에 그대로 적용되는 문제

예시

  • 사격을 할경우 A호스트에서 플레이어 b가 플레이어 c에게 쏜 경우 B의 게임 월드에서는 로컬 b가 플레이어 c에게 쏜 척만 하게 된다
  • 변경된 수치 받아들이고 겉으로 보이는 효과음, 파티클 이펙트만 직접 실행
  • b가 여러발을 쏜게 위변조 했다해도 적용이 안된다
    -> 시각적인 처리만 (비주얼 이펙트, 효과음, 애니메이션 재생 등) 로컬에서 해결

RPC

  • 호스트에 처리를 위임하고 호스트가 처리 결과를 클라에 전파하려면 RPC(원격 프로시저 호출)를 구현해야 한다. RPC는 어떤 메서드나 처리를 네트워크를 넘어 다른 클라이언트에 실행 하는 것
  • Shot() 총 쏘는 것도 호스트가 아니면 RPC를 통해 실행하도록 한다
    1. 호스트 A -> 클라 a,b,c,d에 RPC(b.shotEffect())전달
    2. 클라 A,B,C,D의 각 게임 월드에서 게임 오브젝트 b가 shotEffect()를 실행하여 사격 효과 재생

포톤

  • gameVersion : 같은 버전끼리 매칭할 때 사용 숫자외에도 가능
  • PhotonNetwork.LoadLevel() 어떤 씬을 로드하고, 해당 씬의 구성이 플레이어 사이에서 동기화하도록 유지 룸의 플레이어들이 함께 새로운 무대로 이동
profile
안녕하세요

0개의 댓글