Showing

[TIL] 언리얼 네트워크 플레이어 프로그래밍 본문

Today I Learned (TIL)

[TIL] 언리얼 네트워크 플레이어 프로그래밍

RabbitCode 2024. 1. 11. 13:18

세명의 플레이어가 아니라 사실상 9명의 플레이어있게된다.

https://nybot-house.tistory.com/84

 

1. 네트워크 동기화

4인 멀티플레이어 게임에서 플레이어 캐릭터는 총 16명이다 게임 서버를 공부한 사람이라면, 이 문장을 이해할 수 있어야 한다. 각 클라이언트의 게임 월드는 네트워크상에서 평행우주처럼 동작

nybot-house.tistory.com

참고

좌상단: 호스트 서버 겸 클라0, 좌하단: 클라1, 우하단: 클라2

오직 서버만 Role == ROLE_Authority 이고 RemoteRole == ROLE_SimulatedProxy 또는 ROLE_AutonomousProxy 로 보일 것이다.

1. Lobby System

플레이어의 접속과 퇴장을 관리해야 한다.

방(Session)을 개설한 사람이 서버이자 호스트이자 클라0이 된다.

추후 참가자들은 Find Session을 통해 열린 방들을 확인하고 Session에 Join하여 호스트 및 다른 참가자들과 만날 수 있다.

 

2. Role

언리얼 엔진은 Replication(복제)을 통해 네트워크 동기화를 처리한다.

언리얼 멀티플레이어 프로그래밍에서 액터(Actor) 또는 플레이어 컨트롤러(Player Controller)와 관련된 역할을 나타내는 개념이 두가지가 있다. 바로 "Local Role"과 "Remote Role"

이 두 역할은 네트워크 게임에서 데이터 동기화와 상호작용을 관리하는 데 필수적이다.

  1. Local Role
  2. Remote Role

https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/Roles/

 

액터 롤 및 리모트 롤

액터 오브젝트 리플리케이션의 여러가지 부분에 대한 것입니다.

docs.unrealengine.com

롤과 리모트 롤은 이 값을 누가 조사하는가에 따라 반대가 될 수 있다. 예를 들어 서버에서 환경설정이 이렇게 되어있다면:

  • Role == ROLE_Authority
  • RemoteRole == ROLE_SimulatedProxy

클라이언트에서는 이렇게 보일 것이다:

  • Role == ROLE_SimulatedProxy
  • RemoteRole == ROLE_Authority

이는 정상인데, 액터를 담당하는 것은 서버이며, 이 액터를 클라이언트에 리플리케이트하기 때문이다. 클라이언트는 그저 업데이트를 받아 액터에 시뮬레이션을 적용할 뿐이다.

 

3. 리플리케이션 모드

1. ROLE_SimulatedProxy

2.ROLE_AutonomousProxy

 

서버는 업데이트마다 액터를 리플리케이트하지 않는다. 그러면 대역폭과 CPU 리소스를 너무 많이 잡아먹을 것이다. 그래서 서버는 AActor::NetUpdateFrequency 프로퍼티에 정의된 빈도로 액터를 리플리케이트합니다.

클라이언트에서 액터 업데이트 사이에 약간의 시간이 흐른다는 뜻이다. 이때문에 액터의 동작이 간헐적으로 끊어져 보일 수가 있다. 그에 대한 보정을 위해, 클라이언트는 업데이트 사이에 액터 시뮬레이션을 적용합니다. 발생하는 시뮬레이션 유형은 두 가지이다.

`ROLE_SimulatedProxy`

네트워크 레플리케이션 시스템에서 사용되는 역할 중 하나. "ROLE_SimulatedProxy"라는 열거형 상수로 표현

"ROLE_SimulatedProxy" 역할은 주로 클라이언트 측에서 제어되는 액터 또는 컨트롤러를 나타내며, 이러한 역할의 변경 사항은 클라이언트에서 처리. 클라이언트 측에서 다른 플레이어 또는 서버로부터 수신한 정보를 기반으로 액터를 업데이트하는 역할.(다른 플레이어나 서버로부터 정보를 받아서 그에 따라 동작)

 

가령, 서버가 특정 액터에 대한 업데이트를 전송할 때, 클라이언트는 그 위치를 새로운 위치쪽으로 조정한 다음, 업데이트 사이마다 클라이언트는 서버에서 전송된 최근 속도에 따라 액터를 계속해서 움직인다.

 

`ROLE_AutonomousProxy`

Autonomous (자율적인) 역할은 "ROLE_AutonomousProxy"라는 열거형 상수로 표현

자율 프록시는 보통 플레이어 컨트롤러에 빙의된 액터에만 사용된다. 이 액터는 사람 컨트롤러에서 입력을 받는다. 즉, 로컬 플레이어나 클라이언트가 직접 조작하는 역할을 의미한다. 예를 들어, 자신의 캐릭터를 움직이고 조작하는 것은 "ROLE_AutonomousProxy" 역할을 가진 액터 또는 컨트롤러로 간주된다.