[Unity] 유니티 멀티 플레이 관련 자료 정리

신남·2025년 1월 7일

https://unity.com/es/resources/ultimate-guide-advanced-multiplayer-networking
이 게시글은 유니티의 해당 자료를 읽고 정리한 내용입니다.

실습이 아니라 이론적인 부분이라 거의 번역에 가깝습니다. 또한, 제가 이해한 대로 작성하는거라 오류가 있을 수 있으며 오타나 잘못된 사항은 지적해주시면 감사하겠습니다.

Basic concepts

멀티 플레이 게임에서는 유저들이 직접 연결되거나 서버를 통해 연결 됩니다.
이는 각각의 디바이스에서 같은 어플리케이션이 유사하게 실행되어야 하며 각각의 플레이어의 동작이 네트워크를 통해 동기화 되어야 합니다.

네트워크에 연결된 게임의 구조에는 2가지 요소가 있습니다 클라이언트와 서버.

클라이언트는 사용자의 디바이스에서 실행되는 게임을 말하며 클라이언트에서는 그래픽 랜더링과 오디오 출력, 사용자의 입력을 다루며 이러한 동작들을 서버로 보내게 됩니다.

서버에서는 게임의 상태를 관리하고 게임의 규칙에 맞게 클라이언트 사이를 연결합니다.

UDP packets

클라이언트와 서버간의 연결은 주로 UDP(User Datagram Protocol)에 의해 이루어 집니다.
FPS와 같은 게임에서는 TCP(Transmission Control Protocol)보다 선호되는데 TCP와 달리 UDP는 확인 응답이 없기 때문에 더 빠르게 진행되기 때문입니다.

UDP packet은 낮은 지연시간과 높은 속도를 제공하지만 신뢰성이 부족합니다. 이로인해 패킷 손시리나 중복, 순서변경, 손상 등의 문제가 발생되기도 합니다.

Ticks and updates

server tick는 서버측에서 업데이트 하는 빈도를 update rate는 클라이언트 - 서버 간 데이터 교환 빈도를 의미하며 둘 다 게임의 반응성과 성능에 영향을 미칩니다.

따라서 적절한 균형을 찾는게 중요하며 실무에서는 게임 플레이 요구사항에 달라지기도 합니다.
FPS와 같은 게임에서는 순간적인 사격을 반영하기 위해 일반적으로 60Hz이상에서 실행되며 전략게임류 에서는 30Hz의 tick로 충분하며 대규모 MMORPG의 경우에는 10Hz로 사용하기도 합니다.

Latency (지연)

latency(지연)은 데이터가 목적지까지 도착하는 물리적인 시간을 의미하며 RTT(Round Trip Time)은 목적지로 이동한 후 응답과 함께 돌아오는데 걸리는 왕복시간이며 네트워크 지연의 척도가 됩니다.

일반적으로 200ms에 가까워지면 게임 성능 저하를 느끼고 FPS게임에서는 100ms이하에서 전략게임에서는 500ms까지 허용하기도 합니다.

지연의 주요 원인은 네트워크 자체로 주요 원인은

  • 처리 지연 : 라우터가 패킷 해더를 읽고 목적지까지 걸리는 시간
  • 전송 지연 : 네트워크에 전송하는 데 필요한 시간
  • 큐잉 지연 : 인터페이스 용량 제한으로 대기열에 머무르는 시간
  • 전파 지연 : 물리적 거리, 물리적 매체, 신호 유형 등에의한 시간

등이 있습니다.

Network synchronization (네트워크 동기화)

모든 플레이어가 동일한 게임상태를 유지하기 위해 계속해서 데이터를 주고받으며 게임 상태를 업데이트 합니다. 이를 위한 기술을 몇가지 소개하면

  • 상태 동기화 : 네트워크 객체 상태를 주기적으로 통신하며 동기화
  • 원격 프로시저 호출(RPC, Remote Procedure Calls) : 서버나 다른 클라이언트에서 원격으로 함수를 호출하여 동기화
  • 대역폭 관리 : 네트워크 전송 데이터를 줄여서 전송
    • 데이터 제거 : 필수 업데이트만 동기화
    • 델타 압축 : 변경사항(델타) 데이터만 동기화
    • 관심 관리 : 기준에따라 우선 순위 선정
      • 공간적 관련성 : 플레이어와의 거리 및 가시성을 기준으로 우선순위 선정
      • 갱신 주기 : 최근 전송되지 않은 데이터를 우선 전송
      • 상호작용 : 최근 플레이어와 상호작용 했거나, 상호작용할 가능성이 높은 객체를 우선

Network Topologies (네트워크 위상)

멀티플레이 환경에서 장치들이 어떻게 연결되고 통신하는지에 대한 정의를 말하며 각각의 장단점이 있어 게임의 유형과 상태, 서버 인프라 등에 따라서 달라집니다.

Client-server topology (클라이언트-서버 형태)

가장 일반적인 형태로 클라이언트에서 사용자의 입력, 캐릭터의 움직임 등을 서버로 보내고 서버는 게임의 규칙에 맞게 플레이어의 입력에따른 상태를 업데이트하여 클라이언트에 반환합니다.

대표적인 형태로

Dedicated game server (전용 게임 서버)

서버는 데이터 처리만 함으로써 게임에 참여하지 않는 형태입니다. 플레이어간 상호작용에 대한 결과를 연산하고 반환하기에 최고의 성능을 제공하며 치트 방지에 효과적입니다.

Client-hosted listen server

클라이언트가 서버의 역할을 동시에 하며 연결되는 형태입니다. 호스트 되는 클라이언트 장치의 성능에 따라 게임환경이 바뀌고, 호스트와 다른 클라이언트간의 지연이 발생합니다.

Distributed Authority (분산 권한)

해당 모델은 게임 상태의 제어와 관리를 모든 클라이언트에 분산 시킵니다. 게임 내 객체 상태에 대해서 로컬에서 처리하고 이에 대한 결과를 서버로 전송하여 결과만 저장합니다. 서버의 요구사양이 낮아져 비용 절감이 가능하고 클라이언트 로컬에서 동작이 처리되기 때문에 입력에 대해 반응이 즉각적입니다.
하지만, 모든 동작을 검증하지 않기때문에 치트에 취약하며 정밀한 시뮬레이션이나 높은 경쟁성을 요구하는 게임에는 적합하지 않습니다.

Local or couch multiplayer

단일 클라이언트에 여러 플레이어가 접속하는 방식입니다. 여러 플레이어가 게임을 진행하지만, 단일 클라이언트에서 진행되기에 네트워킹이 필요하지 않습니다(ex 마리오 파티)

Peer-to-Peer (P2P)

플레이어간 직접 연결을 통해 비용과 서버 복잡성을 줄였으며 Distributed Authority형태와 달리 중앙서버가 아예 없는 형태로 서버 비용이 줄어들지만, 공정성과 보안에 취약하며 지연시간이 불일치 하게 된다.

0개의 댓글