언리얼 엔진 - 서버와 클라이언트의 Actor 의 네트워크 규칙

다른 작성 글에서 네트워크 함수로 클라이언트인지 서버인지 구별하는 코드를 소개하였다.

언리얼 엔진 네트워크 기능

  • Net Mode
    • 게임의 네트워크 환경을 알려준다.
    • Client, Listen Server, Dedicated Server
  • HasAuthority
    • 권한을 부여 받았는지 확인하기
    • True, False
  • GetLocalRole
    • 자신의 입장에서 액터에 적용된 규칙을 알려준다.
    • Authority, Simulated Proxy, Autonomous Proxy
  • GetRemoteRole
    • 상대방 입장에서 액터에 적용된 규칙을 알려준다.
    • Authority, Simulated Proxy, Autonomous Proxy

예상 시나리오 - Dedicated Server

데디케이트 서버의 환경을 바라보자.


Server, Client 각자의 네트워크 - Dedicated Server

Server

World
+----------------------+
| Spawn Actor          |
| +------------------+ |
| | Actor1 Character | |  <- Player Controller <- Player1 
| +------------------+ |
|                      |
| Spawn Actor          |
| +------------------+ |
| | Actor2 Character | |  <- Player Controller <- Player2 
| +------------------+ |
+---------------------=+
  • 서버가 바라보는 월드 입장이다.
  • 캐릭터가 되는 Actor 2개를 월드에 스폰한 상태이다.
  • 스폰된 Actor는 각각의 Player 가 컨트롤러로 연결한 상태이다.

Client

World
+----------------------+
| Spawn Actor          |
| +------------------+ |
| | Actor1 Character | |  <- Player Controller <- Local Player1 
| +------------------+ |
|                      |
| Spawn Actor          |
| +------------------+ |
| | Actor2 Character | |
| +------------------+ |
+---------------------=+
  • 로컬 플레이어1 자신의 컨트롤러 가지고 Actor1 캐릭터를 조종하고 있다.

Server 입장에서 바라볼 때 Actor1 네트워크 규칙은?

Server 네트워크 모드와 스폰된 Actor1의 규칙은 다음과 같다.

  • NetMode: DedicatedServer
  • HasAuthority: True
  • GetLocalRole: Authority
  • GetRemoteRole: AutonomousProxy

GetRemoteRole 은 원격의 Client 자신의 서버로 입장해 액터의 권한이 무엇인지 알려주는 것이다.


Client 입장에서 바라볼 때 Actor1 네트워크 규칙은?

Client 네트워크 모드와 스폰된 Actor1의 규칙은 다음과 같다.
참고로 Client에서 플레이어는 Player1로 직접 조종한다.

  • NetMode: Client
  • HasAuthority: False
  • GetLocalRole: Autonomous Proxy
  • GetRemoteRole: Authority

Client 입장에서 바라볼 때 Actor2 네트워크 규칙은?

Client 네트워크 모드와 스폰된 Actor1의 규칙은 다음과 같다.
참고로 Client에서 플레이어는 Player1로 직접 조종한다.

  • NetMode: Client
  • HasAuthority: False
  • GetLocalRole: SimulatedProxy
  • GetRemoteRole: Authority


Server, Client 각자의 네트워크 - Listen Server

Server And Client

World
+----------------------+
| Spawn Actor          |
| +------------------+ |
| | Actor1 Character | |  <- Player Controller <- Player1 
| +------------------+ |
|                      |
| Spawn Actor          |
| +------------------+ |
| | Actor2 Character | |  <- Player Controller <- Local Player2 
| +------------------+ |
+---------------------=+
  • 해당 플레이어는 클라이언트와 서버 역할을 겸직한다.
  • 캐릭터가 되는 Actor 2개를 월드에 스폰한 상태이다.
  • 스폰된 Actor는 각각의 Player 가 컨트롤러로 연결한 상태이다.

Client

World
+----------------------+
| Spawn Actor          |
| +------------------+ |
| | Actor1 Character | |  <- Player Controller <- Local Player1 
| +------------------+ |
|                      |
| Spawn Actor          |
| +------------------+ |
| | Actor2 Character | |
| +------------------+ |
+---------------------=+
  • 로컬 플레이어1 자신의 컨트롤러 가지고 Actor1 캐릭터를 조종하고 있다.

Server 겸직한 바라볼 때 Actor2 네트워크 규칙은?

Server와 Client 겸직하는 네트워크에서 Actor2 를 물어보고 있다.

  • NetMode: Listen Server
  • HasAuthority: True
  • GetLocalRole: Authority
  • GetRemoteRole: Simulated Proxy

상대방 Client 입장에서는 Actor2의 네트워크는 그저 시뮬레이션된 캐릭터이므로 Simulated Proxy가 된다.


정리

NetMode, Authority Role 이 어떻게 구성되는지 살펴보았다.
언리얼 엔진의 멀티플레이어의 기초 기반이 되므로 참고하도록 하자.