UE - 네트워크 추가 공부
UnrealEngine
최적화
Relevancy
네트워크로 업데이트하는 액터들을 최적화하기 위해 사용하는 방식으로 액터의 Replicate를 하는 조건을 추가하는 기능이다.
NetCullDistanceSquard
속성을 사용하여 거리 내의 플레이어들만 해당 Actor
를 Replicate
할 수 있다.
만약 bAlwaysRelevant
를 사용하면 거리와 상관없이 Repllicate
된다.(게임 모드같은 전역객체에서 사용하자.)
Dormancy
최적화를 위해 사용하는 기능으로, 업데이트가 자주 발생하지 않는 Actor
들을 휴면 시킨다.
SetNetDromancy
를 호출하여 모든 연결에 대해 휴면 상태로 만들 수 있다.
bNetStartup
과 InitailLifeSpan
등을 이용해 처음부터 Dormant
로 시작 가능하다.
FlushNetDormancy
를 호출하면 Awake
상태가 된다.
그 외
Update Rate
를 조절해 최적화가 가능하다.NetUpdateFrequency
를 조절해 초당 최대 업데이트 횟수도 설정 가능.NetPrioiry
로 우선순위 설정 가능하다.NetUpdateFrequency
가 높을수록 부드럽고 낮을수록 끊어져 보인다.Adaptive Frequency
를 사용해 사용 빈도에 따라 업데이트 주기를 자동으로 조절하는 기능을 제공한다. (빠르게 움직이는Actor
는NetFrequency
를 높이면 된다.)
네트워크 추가 공부
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는 크게 Autonomous와 Simulated로 구분한다.
Autonomous는 서버로부터 수신과 클라의 입력 정보를 서버에 보내는 등의 송신 로직을 보낸다.
Simulated는 일방적으로 서버로부터 데이터를 수신만 한다.
Autonomous
는 클라이언트 자신이 조종하는 캐릭터다.
Simulated
는 다른 클라이언트가 조종하는 캐릭터다.
- 플레이어
A
가 서버에 접속한다. - 플레이어의 캐릭터를 서버가 생성,
A
의 클라이언트가 이를 복제한다. - 서버측에서 플레이어 캐릭터의
Local Role
을 확인하면Authority
. (서버가 관리하니까) - 클라이언트에서는
AutonomousProxy
(자신이 조종하니까) Remote Role
에선 다른 네트워크 상에서 인식하는 방법을 확인.Remote Role
로 확인하면 서버에서 클라A의 입장으로 캐릭터를 보면Autonomous
, 클라에선 서버 입장으로 보니,Authority
다.- 만약 서버에서 아무도 조종하지 않는 캐릭터를 생성한다면?
- 서버
Local
은Authority
(내가 만들었으니까) - 클라
Local
은None
(아무도 조종하지 않으니까, 누군가 조종했다면Simulated
)
Own
소유되는지 확인하는 것. Authority
와는 다르다.
Authoriity
는 권한을 가지기에 관리하고 결정하기가 가능하다.
Own
은 소유권을 가지기에 조작 가능하며 RPC
를 호출할 수 있다.
소유권은 4가지
Client-Owned Actor
: 클라 자신이 소유하는 액터 Owned by different client
: 다른 클라가 소유한 액터 Server-Owned Actor
: 서버 스폰, Owner없고 Replicated = true Unowned Actor
: 소유자가 없는 액터, 복제되지 않은 상태