Post

UE - 네트워크 다시 공부

UnrealEngine

UE - 네트워크 다시 공부

언리얼 엔진 네트워크 개요

언리얼 엔진은 Server-Client 구조를 사용한다.
Server로 정의된 인스턴스가 게임의 상태에 대한 Authority(권한) 를 가지며, Client들이 Server의 정보를 받아 업데이트하는 방식이다.

Client 끼리는 직접 통신하지 않고, 서버를 거쳐 통신한다.

언리얼 네트워크 클래스 역할

가장 모호했던 부분이였는데, 좀 갈피를 잡은 것 같다.

특정 클래스들은 서버에서만 존재하거나 접근에 제한이 있다.

클래스존재 위치역할
GameModeServer게임 규칙 제어
GameStateServer와 모든 Client게임의 전체적인 정보(e.g. 점수, 시간) 동기화
PlayerControllerServer와_자신을 소유한 Client_각 플레이어의 입력은 자기 Client와 Server에만 알 수 있음
PawnServer와 모든 Client모든 플레이어가 자신 외의 Pawn도 볼 수 있도록 Server에 Replicate

GameMode는 서버에서만 존재한다.
PlayerController는 자신을 소유한 클라이언트와 서버만 접근 가능하다.
Pawn은 모든 클라이언트에서 접근 가능하다.
컨트롤러는 소유자만 접근이 가능한데 왜 Pawn은 접근이 허용되는지 이해가 어려웠는데, 설명을 들어보니 다른 클라이언트에서도 보여야하기에 접근이 가능하다고 한다.

이렇기 때문에 게임의 진행은 서버에서만 컨트롤이 가능하며, 클라이언트들은 자신이 소유한 컨트롤러를 다른 클라이언트에게 보호할 수 있다.

물론 P2P 서버의 경우 방장이 서버이므로 접근이 가능하다.

Replication

Replication은 서버에서 클라이언트로 특정 변수나 객체의 상태를 자동 동기화하는 기능이다.

이번 과제에서 이 부분에서 문제가 있었는데, 서버에서 컨트롤러마다 id를 부여했지만 Replication을 사용하지 않아 클라이언트에게는 빈 값으로 들어갔던 문제가 있었다.

이처럼 계속 변할 수 있고, 변수로 저장하는 데이터들을 동기화할 때는 Replication을 사용하는 것이 좋다고 한다.

위에서 설명한 user id 말고도 플레이어의 위치나 체력 등에서도 사용한다.

Replication은 서버에서 클라이언트에게 전달하는 단방향 통신만 지원한다.
값의 동기화만 지원하기에 이벤트처럼 사용하려면 RepNotify를 사용해야한다.

또한 GetLifetimeReplicatiedProps() 함수에서 어떤 변수를 복제할지 설정을 해줘야 작동한다.

RCP

RPC는 원격 머신에서 함수를 호출하는 명시적인 방법이라고 정의할 수 있다.

RPC는 Replication과 달리 “값”이 아니라 “함수 호출”을 동기화하는 개념이다.

3가지 RPC가 존재한다.

  • Server는 클라이언트가 서버에게 함수 호출을 요구할 때 사용하는 RPC
  • Client는 서버가 특정 클라이언트에게 함수 호출을 요구하는 RPC
  • Multicast는 서버에서 호출해 서버와 모든 클라이언트에서 호출되는 RPC

Multicast는 저번 스터디에서 테스트한 내용이 기억에 남는데, 클라이언트에서 Multicast를 실행하면 해당 클라이언트에서만 작동했었다.

RCP의 경우 함수 호출로 구현되기에 일회성 이벤트와 같은 사용방식으로 이용한다. 또한 호출할 때마다 패킷을 생성한다고 한다. 패킷은 크면 클수록 좋지 않기에 이 부분을 신경써야 할 것 같다.

Replication, RCP의 차이</sapn>

  • 통신 방향
    • Replication은 서버->클라이언트 단방향 통신
    • RPC는 양방향 통신.
  • Automatic vs Manual
    • Replication은 값이 바뀌면 자동으로 동기화.
    • RPC는 명시적으로 호출이 필요.
  • 순서
    • Replication은 한 번에 뭉쳐서 보내 순서를 보장하지 않음.
    • RPCReliable, Unreliable 로 순서를 보장할 지 결정할 수 있음.
This post is licensed under CC BY 4.0 by the author.