내일배움캠프 80일차 - 언리얼 엔진 C++ 멀티플레이어: Property Replication 심화

Property Replication 심화

NetLoadOnClient

레벨 디자인을 통해 레벨에 고정적으로 배치되는 액터NetLoadOnClient 속성을 true로 지정해서 모든 클라이언트가 스스로 스폰하도록 한다.

※ 플레이어의 로그인에 따라 스폰되는 액터(PlayerController, Pawn 등)와 혼동하면 안된다.

각 PC에 보이는 레벨에 배치된 액터는 NetLoadOnClient == true이다.

Replication Notify

레플리케이션 프로퍼티를 읽은 뒤 매 틱마다 함수를 호출하는 것은 비효율적이다. SetActorLocation()등을 사용할 때 값이 변하지 않았음에도 함수를 호출하기 때문이다.

때문에 값이 변할때만 SetActorLocation() 등의 무거운 함수를 호출할 때는 Replication Notify를 쓰는 것이다.

Replication Notify 콜백 함수는 아래처럼 정의가 가능하다.

UPROPERTY(ReplicatedUsing = OnRep_함수명)
float 변수명;

UFUNCTION()
void OnRep_함수명

※ 구분을 위해 Replication Notify 콜백함수는 'OnRep_' 접두어를 붙이는 것이 관례이다.

Replication Notify서버에서는 실행되지 않고, 클라이언트에서만 실행된다.
서버에서도 해당 로직이 실행되어야 한다면, 명시적으로 호출해줘야 한다.

C++ 'OnRep_' 함수 VS Blueprint RepNotify 함수

공통점
 : 속성 값이 변경되면 변경된 값이 클라이언트에 복제(Replicate)되는 시점에 호출되는 콜백함수를 바인드할 수 있다.
 → 이를 Replication Notify라고 한다. C++에서는  'OnRep_', 블루프린트에선 'RepNotify'

차이점
C++ OnRep_ 함수
 - 클라이언트에서만 호출
 - 명시적 호출 가능
 - 속성 값이 변경될 때만 호출

Blueprint RepNotify 함수
 - 서버와 클라이언트 모두에서 호출
 - 명시적 호출 불가능
 - 서버는 항시 호출, 클라이언트는 속성 값이 변경될 때만 호출

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁