서버와 클라이언트에 위치한 액터의 역할
클라이언트-서버 모델에서는 항상 서버에 있는 액터만이 신뢰되므로 Authority를 가진다고 표현
클라이언트의 액터는 대부분 서버 액터를 복제한 허상에 불과하여 Proxy라고 표현
로컬 역할과 리모트 역할
리슨 서버의 경우 플레이어로서 게임에도 참여하므로 게임 로직을 사용
게임 로직은 서버 액터에 대해서만 게임에 관련된 작업을 수행해야 함
이를 구분하기 위해 현재 동작하는 어플리케이션의 역할을 Local Role, 커넥션으로 연결된 어플리케이션의 역할을 Remote Role을 액터에 부여
서버 어플리케이션 관점에서 Server 액터는 Local, Client 액터는 Remote
클라이언트 어플리케이션 관점에서 Server 액터는 Remote, Client 액터는 Local
액터 역할의 종류
None : 액터가 존재하지 않음
Authority : 서비스를 대표하는 신뢰할 수 있는 역할, 게임 로직을 수행
AutonomousProxy
Authority를 가진 오브젝트의 복제품, 일부 게임 로직을 수행
클라이언트의 입력 정보를 서버에 보내는 능동적인 역할을 일부 수행
플레이어 컨트롤러와 폰이 해당
SimulatedProxy
Authority를 가진 오브젝트의 복제품, 게임 로직을 전혀 수행하지 않고 반영만 해주는 허상 액터
일방적으로 서버로부터 데이터를 수신하고 이를 반영
액터의 역할을 파악하는 API
AActor::HasAuthority : Authority Role을 가진 액터인지 체크
입력에 관련된 게임 로직 실행은 Authority와 Autonomous Proxy에서만 허용
AController::IsLocalController
APawn::IsLocallyControlled
생성자에서는 엔진이 초기화되는 시점이므로 오너십에 대해 제대로 동작하지 않기 때문에 생성자에서 IsLocallyControlled를 사용하지 않아야 함
NetMode에 따른 오브젝트 배치 및 API 사용
서버에만 존재하는 액터 : 게임 모드
서버와 모든 클라이언트에 존재하는 액터(SimulatedProxy) : 배경 액터와 폰
서버와 소유하는 클라이언트에만 존재하는 액터 : 플레이어 컨트롤러
클라이언트에만 존재하는 오브젝트 : 시각적인 표현을 담당하는 오브젝트(애니메이션 블루프린트 및 UI 등)
게임 모드는 서버에만 존재하므로 HasAuthority 함수를 호출할 필요가 없음
폰은 Autonomous와 Simulated가 혼합되므로 API를 사용해 로직을 구분해야 함
애니메이션 재생이나 UI 관련 로직은 클라이언트에만 사용하므로 서버는 변경된 속성을 전달하고, 변경된 속성에 따라 애니메이션이나 UI를 바꾸도록 설계해야 함
호스트의 플레이어 컨트롤러와 폰이 서버에만 존재하므로 Remote Role이 SimulatedProxy
클라이언트의 폰은 possess되면서 AutonomousProxy로 변경됨
마지막 폰(ABCharacterPlayer_1)의 경우는 호스트 액터를 의미하므로 클라이언트에서 호스트를 조작할 수 없으므로 SimulatedProxy
언리얼 엔진의 Connection HandShaking
HandShaking : 네트워크로 접속하는 두 컴퓨터가 잘 연결됐는지 확인하는 과정
NMT_NetSpeed 패킷을 보내서 원할하게 통신하도록 네트워크 속도 설정
게임의 준비
커넥션을 허용하면 게임을 시작할 수 있도록 클라이언트와 서버가 준비 과정을 거침
클라이언트는 맵 로딩이 완료되면 NMT_Join 패킷을 보낸 후 서버는 클라이언트를 대표하는 플레이어 컨트롤러 생성
언리얼 네트워크 시스템 구성
용도에 따라 패킷을 처리하는 다양한 NetDriver 클래스를 제공
GameNetDriver : 게임 데이터를 처리하는데 사용
DemoNetDriver : 게임 리플레이 데이터를 처리
BeaconNetDriver : 게임 외 데이터를 처리
게임 데이터를 처리하는 GameNetDriver로 IpNetDriver를 사용
패킷이 전달되면 주로 채널을 통해 패킷이 분석되고 분석된 정보는 상위 개념인 Bunch로 재구성되어 명령을 파악하고 수행
Bunch를 처리하는데 사용하는 주요 채널
ControlChannel : 클라이언트 서버 간의 커넥션을 다룰 때 사용
ActorChannel : 액터 리플리케이션 작업을 다룰 때 사용
VoiceChannel : 음성 데이터를 전달할 때 사용
'언리얼 > 네트워크 멀티플레이 프레임워크' 카테고리의 다른 글
언리얼5 RPC (0) | 2025.01.13 |
---|---|
언리얼5 액터 리플리케이션 (0) | 2025.01.10 |
언리얼5 Connection과 Ownership (1) | 2025.01.03 |
언리얼5 네트워크 모드와 로그인 (0) | 2025.01.01 |
언리얼 네트워크 멀티플레이 프레임워크 개요 (1) | 2024.12.31 |