반응형
#include <Net/UnrealNetwork.h>
.header
UPROPERTY(Replicated, EditAnywhere)
uint32 JumpCount;
virtual void GetLifetimeReplicatedProps
(TArray<FLifetimeProperty>& OutLifetimeProps)const;
void Jump()override;
.cpp
void ATP_ThirdPersonCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ATP_ThirdPersonCharacter, JumpCount);
}
void ATP_ThirdPersonCharacter::Jump()
{
Super::Jump();
JumpCount++;
if (GetRemoteRole() == ROLE_SimulatedProxy)
{
UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("%s Calles Jump %d Times"), *GetName(), JumpCount));
}
}
DOREPLIFETIME으로 JumpCount를 모든 클라이언트에 복제함
RemoteRole이 Simulated라는 건 함수를 실행하고 있는게 서버라는 의미
서버에서 점프 하면 PrintString함수가 정상 실행되고
클라이언트에서 실행하면 실행 안됨
GetLifetimeReplicatedProps함수 안에서 DOREPLIFETIME으로 복사할 변수를 지정해주면
그 변수의 값이 변할때마다 네트워크가 모든 클라이언트에 변경된 값을 전달해줌
여기서 중요한게 두 Player의 JumpCount 값이 같아지는것이 아니라
Player1의 JumpCount를 Player2가 알게되는것 뿐
롤/리모트 롤 반전
롤과 리모트 롤은 이 값을 누가 조사하는가에 따라 반대가 될 수 있습니다.
예를 들어 서버에서 환경설정이 이렇게 되어있다면:
- Role == ROLE_Authority
- RemoteRole == ROLE_SimulatedProxy
클라이언트에서는 이렇게 보일 것입니다:
- Role == ROLE_SimulatedProxy
- RemoteRole == ROLE_Authority
이는 정상인데, 액터를 담당하는 것은 서버이며,
이 액터를 클라이언트에 리플리케이트하기 때문입니다.
클라이언트는 그저 업데이트를 받아 그 업데이트 사이 액터에 시뮬레이션을 적용할 뿐입니다.
https://docs.unrealengine.com/4.26/ko/InteractiveExperiences/Networking/Actors/Roles/
액터 롤 및 리모트 롤
액터 오브젝트 리플리케이션의 여러가지 부분에 대한 것입니다.
docs.unrealengine.com
반응형
LIST
'UE5' 카테고리의 다른 글
UE Multi UserWidget 중복되지 않게 화면에 띄우기 (0) | 2023.05.03 |
---|---|
UE Muliti Server/Client 체크 법 (0) | 2023.05.02 |
UE 멀티플레이 함수 동기화 (0) | 2023.04.29 |
UE C++ 총기 명중률 (0) | 2023.04.29 |
UE C++ 입력 받을 때 인자도 같이 받기 (0) | 2023.04.25 |