NGO(Netcode for GameObjects)와 Relay

심지태
∙∙조회 3

핵심 개념

NGO와 Relay는 경쟁 관계가 아니라 함께 사용하는 구성 요소다.

  • NGO(Netcode for GameObjects): 게임 상태를 어떻게 동기화할지 담당
  • Unity Relay: 인터넷상에서 플레이어들의 연결을 중계
  • Unity Transport(UTP): NGO의 데이터를 실제 패킷으로 전송
plain text
게임 코드
  ↓
NGO — RPC·상태 동기화·오브젝트 관리
  ↓
Unity Transport — 패킷 전송
  ↓
Unity Relay — NAT·방화벽을 넘어 연결 중계
  ↓
다른 플레이어

한눈에 보는 비교

구분NGOUnity Relay
종류고수준 네트워크 라이브러리Unity가 운영하는 클라우드 중계 서비스
주요 역할게임 상태 동기화호스트와 클라이언트 연결
처리 대상RPC, NetworkVariable, 오브젝트 생성·제거, 소유권NAT, 방화벽, IP 보호, 패킷 중계
게임 규칙 실행가능불가능
카드·체력·턴 동기화NGO가 담당전달만 담당
서버 역할Host/Client/Server 구조 제공게임 서버가 아님
참가 코드직접적인 핵심 기능 아님Sessions와 함께 참가 코드 제공
인터넷 비용라이브러리 자체는 무료무료 한도 이후 사용량 기반 과금
단독 사용LAN·직접 IP 연결 가능게임 상태 동기화 기능이 없어 단독 사용 불가
음성채팅제공하지 않음음성 전송 용도로 사용하면 안 됨
설치 패키지com.unity.netcode.gameobjectscom.unity.services.multiplayer

NGO가 담당하는 것

  • 방장과 참가자 구분
  • NetworkObject 생성과 제거
  • NetworkVariable 상태 동기화
  • RPC를 통한 행동 요청과 결과 전송
  • 오브젝트 소유권 관리
  • 네트워크 씬 관리
  • 연결·퇴장 이벤트 처리

예시:

makefile
클라이언트: “카드 사용 요청”
→ NGO RPC
→ 호스트가 턴과 카드 보유 여부 검사
→ 결과를 NGO로 전체 플레이어에게 전송

Relay가 담당하는 것

직접 IP 방식에서는 공유기 설정, 포트 포워딩, NAT와 방화벽 문제가 발생할 수 있다. Relay는 모든 플레이어가 Unity의 중계 서버에 접속하도록 만들어 이런 문제를 줄인다.

plain text
방장이 Relay 세션 생성
→ 참가 코드 발급
→ 친구에게 코드 전달
→ 친구가 코드로 참가
→ Relay를 통해 방장에게 연결

Relay는 게임 결과를 판단하지 않는다. 방장 PC가 여전히 Listen Server이며, Relay는 패킷만 전달한다.

프로젝트 적용 구성

markdown
NGO + Unity Transport + Multiplayer Services + Relay
                     +
                  Vivox 음성

Unity 6에서는 기존 standalone Relay 패키지 com.unity.services.relay 대신 통합 패키지인 com.unity.services.multiplayer 사용이 권장된다.

  • 방장: 비공개 Session 생성 + Relay 연결 + NGO Host 시작
  • 참가자: 참가 코드 입력 + Session 참가 + NGO Client 연결
  • 게임 판정: 방장 권한
  • 공개 로비·매치메이킹: 구현하지 않음
  • 음성채팅: Vivox 사용

주의사항

  • Relay는 전용 서버가 아니므로 방장이 종료하면 게임도 종료될 수 있다.
  • Relay를 사용해도 방장 치팅 가능성은 남는다.
  • 카드, 턴, 총 결과처럼 중요한 정보는 Reliable로 전송한다.
  • 상체 제스처처럼 일시적인 연출만 필요할 경우 Unreliable을 고려한다.
  • 카드 패 등 비공개 정보는 전체 NetworkVariable로 공유하지 않고 대상 플레이어에게만 전송한다.
  • 음성 데이터를 Relay로 보내지 않는다.

최종 정리

NGO는 게임의 상태와 규칙을 동기화하고, Relay는 그 데이터를 인터넷에서 안전하게 전달한다.
4인 비공개 초대형 게임에는 NGO + Unity Transport + Relay 기반 Listen Server 구성이 적합하며, 커스텀 트랜스포트나 전용 서버는 초기 버전에 필요하지 않다.