Post

UE - 네트워크 추가 공부

UnrealEngine

UE - 네트워크 추가 공부

최적화

Relevancy

네트워크로 업데이트하는 액터들을 최적화하기 위해 사용하는 방식으로 액터의 Replicate를 하는 조건을 추가하는 기능이다.

NetCullDistanceSquard 속성을 사용하여 거리 내의 플레이어들만 해당 ActorReplicate할 수 있다.
만약 bAlwaysRelevant를 사용하면 거리와 상관없이 Repllicate 된다.(게임 모드같은 전역객체에서 사용하자.)

Dormancy

최적화를 위해 사용하는 기능으로, 업데이트가 자주 발생하지 않는 Actor들을 휴면 시킨다.

SetNetDromancy를 호출하여 모든 연결에 대해 휴면 상태로 만들 수 있다.
bNetStartupInitailLifeSpan 등을 이용해 처음부터 Dormant로 시작 가능하다.

FlushNetDormancy를 호출하면 Awake 상태가 된다.

그 외

  • Update Rate를 조절해 최적화가 가능하다.
  • NetUpdateFrequency를 조절해 초당 최대 업데이트 횟수도 설정 가능.
  • NetPrioiry로 우선순위 설정 가능하다.
  • NetUpdateFrequency가 높을수록 부드럽고 낮을수록 끊어져 보인다.
  • Adaptive Frequency를 사용해 사용 빈도에 따라 업데이트 주기를 자동으로 조절하는 기능을 제공한다. (빠르게 움직이는 ActorNetFrequency를 높이면 된다.)

네트워크 추가 공부

NetMode

해당 게임 프로세스가 네트워크 상에서 어떤 역할을 하고 있는지를 의미함.
종류로는 Single, Server, Client가 있다.

로직이 서버에서 실행되는지 클라에서 실행되는지 확인할 때 사용한다.

NetDriver

언리얼 네트워크 통신에서 로우레벨 동작을 관리하는 클래스.
싱글플레이에선 생성되지 않는다.
멀티플레이에서만 UWorld::Listen 함수를 통해 생성된다.
PC마다 NetDriver 개체가 생성된다.

NetConnection

다른 PC랑 연결이 발생할 때 그에 대응하는 NetConnection 개체도 생성된다.
NetDriver가 개체를 소유, 관리한다.
서버 PC에 생성된 NetDriver 접속하는 클라 수 만큼 관리한다.
클라 PC에선 ServerConnection 하나만 관리한다.

Authority와 Proxy

Authority는 서버에 스폰 되어 있는 액터다.
클라이언트는 서버 액터를 복제한 허상이고 이건 Proxy라고 부른다.

로컬 롤, 리모트 롤

액터가 어느 PC에서 스폰되어 로직이 돌고 있는지 구분해야한다.

현재 동작하는 컴퓨터에서의 롤을 로컬 롤 커넥션으로 연결된 컴퓨터에서의 롤은 리모트 롤

Authority: 서비스를 대표하는 신뢰할 수 있는 롤. (보통 서버에서 생성된 액터) Autonomous Proxy: Authority 개체의 복제 롤. (복제 당하며 동시에 서버에도 통신 가능) Simulated Proxy: Authority 개체의 복제 롤. (복제 당하기만 한다.)

Proxy는 크게 AutonomousSimulated로 구분한다.
Autonomous는 서버로부터 수신과 클라의 입력 정보를 서버에 보내는 등의 송신 로직을 보낸다.
Simulated는 일방적으로 서버로부터 데이터를 수신만 한다.

Autonomous는 클라이언트 자신이 조종하는 캐릭터다.
Simulated는 다른 클라이언트가 조종하는 캐릭터다.

  • 플레이어 A가 서버에 접속한다.
  • 플레이어의 캐릭터를 서버가 생성, A의 클라이언트가 이를 복제한다.
  • 서버측에서 플레이어 캐릭터의 Local Role을 확인하면 Authority. (서버가 관리하니까)
  • 클라이언트에서는 AutonomousProxy (자신이 조종하니까)
  • Remote Role에선 다른 네트워크 상에서 인식하는 방법을 확인.
  • Remote Role로 확인하면 서버에서 클라A의 입장으로 캐릭터를 보면 Autonomous, 클라에선 서버 입장으로 보니, Authority다.
  • 만약 서버에서 아무도 조종하지 않는 캐릭터를 생성한다면?
  • 서버 LocalAuthority (내가 만들었으니까)
  • 클라 LocalNone (아무도 조종하지 않으니까, 누군가 조종했다면 Simulated)

Own

소유되는지 확인하는 것. Authority와는 다르다.
Authoriity는 권한을 가지기에 관리하고 결정하기가 가능하다.
Own은 소유권을 가지기에 조작 가능하며 RPC를 호출할 수 있다.

소유권은 4가지

Client-Owned Actor: 클라 자신이 소유하는 액터 Owned by different client: 다른 클라가 소유한 액터 Server-Owned Actor: 서버 스폰, Owner없고 Replicated = true Unowned Actor: 소유자가 없는 액터, 복제되지 않은 상태

This post is licensed under CC BY 4.0 by the author.