중복이긴 하지만 제대로 된 이해를 위해..
GetLocalRole() 반환값
GetLocalRole() == ROLE_Authority ->서버라는 뜻
AActor::HasAuthority 같은 기능
if(GetLocalRole() == ROLE_Authority) //if(HasAuthority())
{
//it's a Dedicated/Listen Server
}
else
{
//it's a Client
}
//h
UPROPERTY(Replicated)
float ReplicatedVar;
void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
//cpp
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
ReplicatedVar = 100.f;
//bReplicates = true; // 여기에 이렇게 넣어도 됨.
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
SetReplicates(true); // beginplay에는 bReplicates = true 이렇게 넣으면 가끔 동작 안 한다는 듯?
SetReplicateMovement(true);
}
void AMyActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyActor, ReplicatedVar); //#include "Net/UnrealNetwork.h"
}
이렇게 해주면 기본적인 복제가 된다.
//h
UPROPERTY(ReplicatedUsing = OnRep_ReplicatedVar) //이렇게 바꿔주고
float ReplicatedVar;
UFUNCTION()
void OnRep_ReplicatedVar(); //이걸 추가해주면 RepNotify
//cpp
void AMyActor::OnRep_ReplicatedVar()
{
//do something
}
replicated 속성을 이렇게 바꿔주면 ReplicatedVar 값이 변할 때마다 복제될 때마다 OnRep_ReplicatedVar()가 호출된다.
여기서 주의할 점은, ""c++로 만든 변수의 경우"", 서버에서 실행하면 호스트의 머신에서는 OnRepReplicatedVar() 호출이 되지 않는다. (GPT 왈: 서버(리슨 서버의 호스트 포함)는 권한(authority)을 가지므로 자신이 직접 변경한 변수에 대해 복제 과정을 거치지 않으며, 따라서 OnRep 콜백이 호출되지 않습니다.)
그러므로 리슨 서버일 때는 아래와 같이 추가적인 OnRep_Func() 호출이 필요하다.
void AMyActor::SomeFunction()
{
if(HasAuthority())
{
ReplicatedVar +=1.f;
OnRep_ReplicatedVar();
}
}
ex)
UFUNCTION(Server, Reliable)
void ServerRPCTest(float Arg);
UFUNCTION(NetMulticast, Uneliable)
void MulticastRPCFunction(float Arg);
void AMyActor::ServerRPCTest_Implementation(float Arg) // _Implementation 필수
{
}
void AMyActor::MulticastRPCFunction_Implementation(float Arg)
{
}

ownership(누가 소유함?)이 핵심 개념


Replicates는 액터나 변수가 자동 복사되길 원할 때
RepNotify는 Replicates 설정한 객체가 복사되는 순간에 특정 함수를 호출하고 싶을 때
RPCs는 함수가 자동 호출되길 원할 때
tmi
강의에서는 액터의 움직임이 똑같지 않아서 해당 액터의 스태틱메시의 component replicates에 체크해주어서 해결되었다. (물리작용 키는 것도 스태틱 메시)