Unreal 게임 개발/Unreal 강의 개인 정리

Unreal Network MultiPlayer framework-1

daisy0461 2025. 3. 6. 01:17

네트워크 멀티 플레이어를 위해 몇가지 설정을 지정해야한다.

실행옵션 - Net Mode - Play As Listen Server

이렇게 설정하면 View Port에서 보여지는 화면은 Listen Server라는 Server로 동작한다.

그리고 Play하면

다음과 같은 이미지가 나온다. 플레이+ 톱니 버튼 (add another clinet)을 누르면 클라이언트가 추가된다.

혹시 위에 저 버튼이 보이지 않는다면

Editor Preferences - allow late joining - true

다음과 같이 Check해주면 나타난다.

또한 Always On Top을 true로 해주면 여러 클라이언트를 실행할 때 창이 위로 나와서 Client를 확인하기 편하다.

 

Unreal의 네트워크 개요이다.

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/networking-overview-for-unreal-engine?application_version=5.4

 

지금 튜토리얼에서 사용할 방법은

Client - Server Model을 사용한다.

네트워크에 있는 하나의 컴퓨터가 서버가 되어 멀티플레이어 게임 세션을 호스팅하고 서버에 접속한 다른 모든 플레이어의 컴퓨터가 클라이언트가 된다.

이때 게임을 호스팅하는 서버가 진실된(Authority) Game State를 보유한다. 즉, 서버가 멀티플레이어 게임이 실제로 벌어지는 곳이다.

Client는 서버에서 자신이 소유한 Pawn을 원격으로 제어해서 서버에 신호를 보내주는 역할을 한다. 또한 서버로부터 화면에 보여지는 것을 Proxy(대리자)라고 한다. 그리고 자신이 실제 플레이 하는 접속주체를 지정한다. 

Server는 Client와 다르게 모니터에 직접 영상을 스트리밍하지 않는다. 대신 각 클라에게 데이터를 리플리케이트(동기화)하여 존재해야하는 Actor의 행동, 변수값을 알려준다.

 

예시로 

A라는 클라이언트에서 캐릭터가 이동을 했다면 A클라이언트에서 캐릭터 이동이라는 신호를 서버에 전해준다.

그리고 서버가 이동을 확인하고 다른 클라이언트에게 A가 이동했음을 알린다.

이를 다른 클라이언트는 동기화하여 모니터에 스트리밍하는 형태이다.

 

이렇게 동기화를 할 때 완벽히 똑같이 동작하진 않고 매우 비슷하게 시뮬레이션한다.

네트워킹이라는 작업이 시간이 걸리기도 하고 전송 가능한 데이터의 양도 한계가 있기 때문에 가장 비슷하게 시뮬레이션 한다.

데이터의 양이 한계가 있기 때문에 Server가 다른 Client에게 정보를 전송할 때

게임플레이 상호작용(Collision, Movement, Damage), Effect & Sound, 개인 플레이어 정보(HUD)를 구분하여 전송한다. 

 

이러한 방법을 통해 모든 플레이어에게 일관된 경험을 제공하고 리플리케이트하는 정보량을 최소화하여
네트워크 대역폭(bandwidth)을 적게 사용하기 위한 방법을 항상 생각해야한다.