내일배움캠프 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 함수
- 서버와 클라이언트 모두에서 호출
- 명시적 호출 불가능
- 서버는 항시 호출, 클라이언트는 속성 값이 변경될 때만 호출
댓글
댓글 쓰기