UE5/Network

Multiplayer in UE : How to Understand Network Replication

Pyxis 2024. 8. 29. 19:45

https://www.youtube.com/watch?v=JOJP0CvpB8w

 

 

Replication system은 3가지 중요한 클래스에 의존한다.

 

1) NetDriver

2) NetConnection

3) UChannel

 

Server가 부팅되면 NetDriver를 생성하고, remote process들로 부터 message를 수신하기 시작한다. (remote process : client that doesn't have authority)

Client가 부팅되면 또한 자체의 NetDirve를 생성하고, server에게 connection을 요청한다.

 

 

일단 Server와 Client의 NetDriver가 서로 연결되면, NetDriver간에 NetConnection을 형성한다.

Server는 각각 연결된 Remote Player들 마다 NetConnection을 갖는 반면, 각 Client들은 Server와 연결된 single NetConnection만을 갖는다.

 

모든 NetConnection내에는 다양한 Channel들이 존재한다.

일반적으로 ControlChannel, VoiceChannel이 있고, 각각의 Connection에는 현재 복제되고있는 Actor마다 존재하는 여러 개의 ActorChannels이 있다.

→ 복제, 즉 Replication은 Actor 단계에서 발생한다. (Replication은 기본적으로 Actor 단위로 발생한다)

 

복제될 자격을 있음을 알리는 bReplicates = true;

그리고 어떤 복제될 자격이 있는 액터가 특정 player에 relevant 하다면, server는 그 player와의 NetConnection내에서 ActorChannel을 개방한다.

그러고 나서, Server와 Client는 해당 Channel을 이용해서 그 Actor에 관해 정보를 교환한다.

 

 

만약 Actor가 Client에 복제되는 경우, 결과로 발생할 수 있는 세 가지 중요한 사항이 있다.

 

1) Actor의 수명(lifetime)은 Server와 Client간에 동기화가 유지된다. 

Server가 replicated actor를 spawn할 경우, Client는 그 actor에 관한 복사본을 spawn할 수 있다고 알림을 받는다.

Server에서 그 actor가 파괴(destroyed)될 경우, Client에서도 파괴된다.

 

2) 복제된 프로퍼티 (Replicated Property)

Actor가 Replicated로 지정된 Property를 갖는 경우, 그러고 나서 그 Property가 서버에서 변경된다면, 새로운 값이 Client에게로 전파된다.

 

3) Remote Procedure Call (RPC)

Server에서 MulticastRPC를 호출할 경우, Server는 모든 Client들의 현재 복제되고 있는 Actor에서 function call을 해야한다고 메세지를 보낸다.

ServerRPC, ClientRPC도 가능하다.

 

Ownership은 Actor Replication에서 또 하나의 중요한 개념이다.

모든 Actor는 Actor 단위로 지정된 Owner를 갖는다. 

보통, Spawn으로 Owner를 설정하나, 런타임에 SetOwner()를 통해 지정할 수도 있다.

 

~6:27