언리얼 엔진 - 레플리케이션

언리얼 엔진은 레플리케이션 기능을 제공하고 있다.

레플리케이션 기능은 서버에 있는 정보를 클라이언트에게 전달하는 기능이다. 수신 받는 상대의 클라이언트는 한 명이 아닌 여러 명이 있을 수 있으므로 서버의 정보를 네트워크로 보내기 전 패킷을 복제하여 모든 클라이언트에게 전파하는 것이 레플리케이션이다.

액터 스폰

서버가 액터를 스폰시켜 액터가 스폰시킨다고 가정한다. 레플리케이션을 사용하려면 액터의 블루프린트 세부 옵션에서 레플리케이션 항목을 참으로 변경해주면 알아서 복제되어 네트워크가 성공적으로 일어진다.

다른 엔진을 사용하는 네트워크 게임에서는 클라이언트로 전송할 네트워크 패킷을 세부적으로 만들어주고 통신하는 코드를 개발해야한다. 언리얼 엔진에서는 매우 간단하게 네트워크를 개발할 수 있도록 되어있다.

액터 디스폰

이미 액터의 레플리케이션 옵션을 켰으므로 싱크가 맞춰져 있고, 서버에서 강제로 액터를 디스폰을 하게 되면 알아서 클라이언트로 전파되어 액터를 모두 디스폰한 모습으로 만들어준다.

레플리케이션 변수 - 복제 범위

레플리케이션으로 정보를 복제하여 싱크를 맞춘다고 했으나 모든 정보까지 복제되지 않는다. 공격력, HP, MP 정보가 담긴 액터에서 스폰 기능만 복제하도록 체크되어 있다면 클라이언트와 서버에 생성된 액터마다 공격력, HP, MP 정보가 불일치하게 될 것이다. 액터의 C++의 클래스나 블루프린트 설계에 따라 복제할 변수들을 지정하면 싱크를 맞출 수 있다.

또한 액터를 상속 받은 Game State, Player State 레플리케이션 대상이 될 수 있고, 정보를 모든 클라이언트에게 전파해 대시보드 현황을 볼 수 있다.

컴포넌트 레플리케이션

액터는 여러 개의 부품을 가질 수 있도록 컴포넌트라는 기능이 있다. 주로 인벤토리, 캐릭터의 이동 및 메쉬의 컴포넌트 추가할 수 있다. 액터에 포함된 컴포넌트이므로 레플리케이션 대상으로 지정할 수 있다.

서버의 레플리케이션

레플리케이션 기능상 한계가 있는데. 오로지 서버가 클라이언트 방향으로만 복제하여 전파하는 것이다. 반대의 개념으로 클라이언트가 서버로 전파하지 않게 된다.

다만 이러한 한계는 장점으로도 볼 수 있는데, 서버가 모든 통제권을 갖고 있으므로 클라이언트가 정보와 위치를 위조할 수 없으므로 공정한 게임으로 진행할 수 있다.

클라이언트들은 서버에서 주는 정보를 가지고 시뮬레이션하는 역할만 하게 된다.