-
[UE5] 액터 리플리케이션UE5 2024. 12. 17. 04:20
액터 리플리케이션이란?
- 특정 플레이어에 속한 액터의 정보를 네트워크 내 다른 플레이어에게 복제하는 작업
- 클라이언트-서버 모델에서는 대부분 서버에서 클라이언트로 전달
- 크게 프로퍼티 리플리케이션과 RPC(Remote Procedure Call)로 나뉨
기본 액터의 로딩
- 클라이언트가 초기화 될 때 모든 액터 정보를 서버로부터 받는 것은 비효율적
- 기본 배경에 관련된 액터는 맵을 통해 스스로 로딩하도록 설계
- 고정액터(배경 액터 등)에 대해 NetLoadOnClient 속성을 체크(기본값)
- 클라이언트가 초기화될 때 서버와 통신 없이 자체적으로 로딩
프로퍼티 리플리케이션
- 네트워크 데이터를 최소화하기 위해 모든 변경 사항을 보내는 대신, 변경을 유발한 속성 값만을 전달
- 액터의 리플리케이션 속성을 참으로 지정
- bReplicates 속성을 true로 설정
// 생성자에서 실행 AABFountain::AABFountain() { ... bReplicates = true; ... }
- 네트워크로 복제할 액터의 속성을 키워드로 지정
- UPROPERTY에 Replicated 키워드 설정
UPROPERTY(Replicated) FLinearColor ServerLightColor;
- GetLifetimeReplicatedProps 함수에 네트워크로 복제할 속성을 추가
- #include "Net/UnrealNetwork.h" 헤더 파일 지정
- DOREPLIFETIME 매크로를 사용해 복제할 속성을 명시
- Lifetiime은 액터 채널의 Lifetime을 의미. 즉, 활성화된 액터 채널로 전송할 복제될 속성을 의미함
void AABFountain::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(AABFountain, ServerRotationYaw); DOREPLIFETIME(AABFountain, ServerLightColor); }
리플리케이션 콜백 함수 호출
- 클라이언트에 속성이 복제될 때 콜백 함수가 호출되도록 구현
- UPROPERTY의 Replicated 키워드를 ReplicatedUsing 키워드로 변경
- ReplicatedUsing에 호출할 콜백 함수를 지정
- 호출될 콜백 함수는 UFUNCTION으로 선언
- 콜백 함수의 구현
- 일반적으로 OnRep_의 접두사를 가지는 이름 규칙을 가짐
- 콜백 함수는 서버가 아닌 클라이언트에서만 호출
- 필요한 타이밍에만 해당 로직을 처리할 수 있어 효율적인 구현 가능
// ABFountain.h UPROPERTY(ReplicatedUsing = OnRep_ServerRotationYaw) float ServerRotationYaw; UFUNCTION() void OnRep_ServerRotationYaw(); // ABFountain.cpp void AABFountain::OnRep_ServerRotationYaw() { FRotator NewRotator = RootComponent->GetComponentRotation(); NewRotator.Yaw = ServerRotationYaw; RootComponent->SetWorldRotation(NewRotator); ClientTimeBetweenLastUpdate = ClientTimeSinceUpdate; ClientTimeSinceUpdate = 0.0f; }
- 서버에서 ServerRotationYaw 값이 변경 되고 클라이언트에 전달이 될때 클라이언트에서 OnRep_ServerRotationYaw() 콜백함수 자동으로 실행
C++ OnReplicatedUsing과 Blueprint RepNotify의 차이점
특징 C++ OnReplicatedUsing Blueprint RepNotify 사용 환경 C++에서만 사용 가능 Blueprint에서 사용 가능 구현 방식 ReplicatedUsing + OnRep_ 함수 변수 속성을 RepNotify로 설정 + 이벤트 처리 값 변경 여부 값이 실제 변경될 때만 호출 서버는 항시 호출 / 클라이언트는 값이 변경될 때만 호출 로직 작성 C++ 코드로 작성 블루프린트 그래프로 작성 복잡성 복잡한 로직이나 상태 관리는 적합 간단한 이벤트 처리에 적합 성능 제어 더 많은 제어 가능(C++로 직접 구현) 블루프린트 실행 성능이 C++보다 약간 느림 'UE5' 카테고리의 다른 글
[UE5] RPC 사용시 주의할 점 (0) 2024.12.17 [UE5] RPC(Remote Procedure Call) (2) 2024.12.17 [UE5] 클라이언트-서버 연결시 호출 함수 정리 (0) 2024.12.12 [UE5] 매크로를 이용한 사용자 정의 로그 (2) 2024.12.10 [UE5] 네트워크 멀티플레이어 (0) 2024.12.10