Unreal Engine/기타

[UE] Network Role

KANTAM 2023. 12. 17. 04:15

Network Role

내가 클라이언트라면 나의 클라이언트 머신 상에 내가 컨트롤하고 있는 폰이 존재한다. 그와 동시에 서버에도 이 폰이 있다. 여기서 다른 클라이언트도 서버에 연결되어 있다면, 그 클라이언트의 머신에도 이 폰이 존재한다. 

모두 같은 폰이지만 각 머신에 동시에 존재한다.

즉, 현재 세 명이 게임에 들어와 있다면, 내 폰은 세 개가 각각의 머신에 존재한다. 이제 어떤 버전의 폰을 코드로 다룰 것인지가 중요해진다. 이런 점을 해결하기 위해, 언리얼 엔진은 ENetRole이라는 enum으로 Role이라는 개념이 있다. 캐릭터나 폰에 부여된 이 enum으로 Role을 식별할 수 있다. 

 

ENetRole::ROLE_Authority

서버 머신에 존재하는 폰의 Role이다. 언리얼 엔진은 authoritative 서버 모델을 사용하기에, 서버에 존재하는 모든 폰은 권한의 역할을 갖는 것으로 간주한다. 

 

ENetRole::ROLE_SimulatedProxy

이 폰을 컨트롤하지 않는 머신에 존재하는 폰에 해당하는 Role이다. 

 

ENetRole::ROLE_AutonomousProxy

내가 컨트롤하는 폰에 해당하는 Role이다. 하지만 리슨 서버이면서, 내가 서버라면 내가 컨트롤하는 폰은 ROLE_Authority Role을 가진다.

 

ENetRole::ROLE_None

어떤 Role도 가지지 않는 폰을 위한 Role이다.

 

예시

서버

서버에서는 모든 폰이 ENetRole::Authority를 가진다.

 

클라이언트

클라이언트에선 자신이 컨트롤하는 폰은 ENetRole::Autonomous_Proxy를 가지고 나머지 폰은 ENetRole::Simulated_Proxy를 가진다.