언리얼 엔진 - 서버와 클라이언트의 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 이 어떻게 구성되는지 살펴보았다.
언리얼 엔진의 멀티플레이어의 기초 기반이 되므로 참고하도록 하자.