[TIL] 멀티플레이 게임

muchan
muchan
∙∙조회 4

멀티플레이와 싱글플레이 차이점

  • 싱글: 상태가 내 메모리 하나
  • 멀티: 여러 기기에 상태 사본 -> 서로 어긋날 수 있음

핵심 키워드: 동기화, 상태 일관성

동기화가 필요한 이유

  • 상태 일관성: 같은 세계를 모두가 같게 봐야함
  • 권한: 누가 "진짜"를 정하나 (치트 방지)
  • 지연/대역폭: 네트워크는 느리고 좁다 -> 모든 걸 보낼 수 없다

토폴로지: 누가 누구에게 연결되나

  • 클라이언트 - 서버: 서버가 데이터/상태의 기준점
  • P2P: 참여자들이 서버 없이 클라이언트이자 서버 역할
  • Host: 플레이어 중 한 명의 기기가 서버 역할 + 플레이어 역할 동시에 함

권한(Authority) 모델: 누가 진짜를 정하나

  • 기본 = 서버 권위: 서버가 결정, 클라이언트는 입력만 보내고 결과를 받음
  • 분산 권한: 각 owner가 자기 것을 결정
  • owner 권한은 opt-in: 기본 권한이 아닌 필요할 때만 켠다

UGS: Unity Gaming Services

  • Authentication: 플레이어 신원(PlayerId/토큰). 다른 서비스의 선행 조건.
  • Relay: 공인 IP/포트개방 없이 트래픽을 중계(NAT 우회)
  • Lobby: 방 목록·참가자·메타데이터
  • Matchmaker: 조건에 맞는 플레이어를 묶어줌
  • Multiplayer Services (Sessions): 위의 Lobby+Relay+Matchmaker를 하나로 감싼 통합 API

NGO: Netcode for GameObject

  • NetworkManager: 시작/종료, 연결 관리
  • NetworkObject: 네트워크에 존재하는 오브젝트
  • NetworkBehaviour: 네트워크 스크립트 베이스
  • NetworkVariable: 자동 동기화 값
  • RPC: 원격 호출(이벤트/명령)

TCP vs UDP

항목TCPUDP
신뢰성보장(재전송)없음(best-effort)
순서보장없음
연결연결 지향(handshake)비연결
혼잡제어있음없음
지연변동 큼(재전송 대기)낮고 일정
오버헤드큼작음
용도웹/파일/로그인실시간 게임/음성/영상

게임이 UDP를 쓰는 이유

  • 게임은 최신 상태가 과거 상태보다 중요하다. 늦게 도착한 옛 위치 패킷은 쓸모없음
  • TCP 의 head-of-line blocking 은 한 패킷 손실이 뒤의 모든 패킷을 막음 → 렉
  • UDP 위에 필요한 신뢰성만 선택적으로 얹는 것이 게임의 표준 전략
  • Unity Transport (UTP) 는 이 전략의 구현체
    • UDP 기반
    • 채널(파이프라인)별로 reliable / unreliable / sequenced 를 선택
    • NGO 2.x 가 의존하는 기본 전송 계층 (자동 설치)