//SomeClass.h
public:
virtual void GetLifetimeReplicatedProps
(TArray<class FLifetimeProperty>& OutLifetimeProps) const override;
private:
UPROPERTY(Replicated)
int SomeVar;
//SomeClass.cpp
void ABlasterCharacter::GetLifetimeReplicatedProps(TArray<class FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ABlasterCharacter, SomeVar);
}
위처럼 Replicated로 지정해준 변수는 서버와 클라이언트가 상태를 공유한다.
SomeVar의 값이 변동되면 다른 클라이언트에도 해당 사항이 반영된다.
모든 클라이언트가 변동 사항을 공유해야 하는 상황에 적절한 UPROPERTY가 되겠다.
특정 클라이언트에만 변동 사항을 반영하고 싶다면
DOREPLIFETIME_CONDITION(ABlasterCharacter, SomeVar, COND_OwnerOnly);
이렇게 작성해주면 된다.
UPROPERTY(ReplicatedUsing = OnRep_SomeEvent)
int SomeVar;
변수의 UPROPERTY를 이렇게 지정해주면, 변동 사항이 있을 경우 UFUNCTION으로 지정해준 OnRep_SomeEvent 라는 이름의 함수가 자동으로 호출된다. 콜백 함수가 되는 거다.

이를 응용해 Overlap된 액터의 위젯을 표시하는 기능을 구현했다.
Overlap 이벤트에 대한 함수 호출은 서버에서만 이루어지고, Overlap된 액터를 포인터 변수로 가리키게 된다.
그 뒤 Overlap 이벤트를 발생시킨 클라이언트에게만 변동 사항을 반영한다.
해당 클라이언트는 콜백 함수를 호출하게 되며 액터의 위젯을 표시한다.
이 때, 콜백 함수는 클라이언트에서만 호출되기 때문에 리슨 서버의 경우 위젯의 표시를 따로 처리해줘야 한다.