Function Replication을 설정하여 모든 클라이언트에게 특정 기능을 실행하도록 하는 예


Dedicated Server를 통해 게임을 호스팅하려면 별도의 언리얼 엔진 소스를 컴파일하여 사용해야 하지만 Listen Server는 다른 준비가 필요 없고 언리얼 엔진 설치 버전만 있다면 바로 개발이 가능하다. 여기서는 Listen Server에서 실행될 간단한 네트워크 기능을 테스트하려고 한다.


플레이어1, 플레이어2가 한개의 큐브 액터를 클릭할 때마다 큐브 액터가 튕겨져 나가도록 하고 양쪽 플레이어의 윈도우에서 큐브의 움직임이 동기화되어 움직이도록 한다


Default Pawn을 기반으로 커스텀 폰 클래스 블루프린트 생성

Game Mode 를 기반으로 커스텀 게임모드 클래스 블루프린트 생성

커스텀 게임모드에 커스텀 폰 클래스 등록

언리얼 레벨 에디터의 월드세팅 / Game Mode 에 커스텀 게임모드 등록


뷰포트에 PlayerStart 2개가 플로어의 양단에 오도록 배치한다


Actor Replication 설정

클라이언트들이 공유할 액터를 생성한다(StaticMeshActor를 기반으로 한 클래스 블루프린트 생성)


아래의 그림과 같이 액터에 Replication을 설정한다. 서버측에서 큐브의 위치가 변경되면 클라이언트에게도 반영되도록 설정한 것이다.


생성한 큐브 액터를 뷰포트에 배치한다

큐브 액터가 Static이 아닌 Movable 으로 설정하고 Simulate Physics 도 체크한다


커스텀 폰 클래스의 [이벤트 그래프]에 다음과 같은 내용을 작성한다


Function Replication 설정

위의 그림에서 하단에 위치한 커스텀 이벤트를 선택하고 다음과 같이 설정한다. [서버에서 실행] 타입의 함수는 클라이언트에서 호출하고 서버에서 실행되는 함수를 말한다. 내부에서는 RPC(Remote Procedure Call)방식이 이용된다. 서버측에서 큐브의 위치가 변경되면 큐브액터는 Replicates 설정되어 있으므로 클라이언트에게도 반영된다.


게임을 실행할 때 Dedicated Server를 시뮬레이션하기 위해 아래처럼 실행한다


다음과 같이 2개의 윈도우에 게임이 실행되고 각 윈도우에서 마우스로 큐브를 클릭하면 양쪽 윈도우에서 큐브가 동기화되어 튕겨 나가는 것을 확인할 수 있다


폰 클래스를 Default Pawn을 사용하지 않고 ThirdPersonCharacter를 복사해서 사용하면 2명의 플레이어에 의해 제어되는 2개의 캐릭터를 뷰포트에서 확인할 수 있다


Posted by cwisky