이제 OnRep이 뭔지 알아봅시다.
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;
protected:
UFUNCTION()
void OnRep_Health();
void AMyCharacter::OnRep_Health()
{
UE_LOG(LogTemp, Log, TEXT("체력 변화 발생! 새로운 값: %f"), Health);
UpdateHealthUI();
}
위와 같이 UPROPERTY에서 OnRep_Health라고 함수랑 매칭해주면 된다.
그러면 나중에 Server측에서 Health의 값을 변경해주면 모든 Client에 있는 Health의 값도 변하면서 OnRep_Health() 함수가 불려져서 UpdateHealthUI() 함수를 실행할 수 있다.
이렇게 해야 하는 이유 중 하나로는
Server를 담당하는 Host는 모든 Actor들을 다 관리하고 있더라도, 각각의 Client들은 모든 Actor를 다 활성화 시키지 않고 어느 정도 거리 이내의 Actor들만 활성화시켜놓는다. NetCullDistanceSquared가 아마 해당하는 변수일거다. NetCullDistanceSquared 값보다 먼 Actor들은 Client에서 없어지는데, 나중에 다시 가까워져서 활성화되면 NetMulticast_함수로 변수를 바꿔주거나 한거는 값이 사라져있을 수 있어서 그렇다.
가까워져서 활성화되면 결국에 Server랑 연동해서 Health의 값을 Server랑 맞춰주니깐 이때 OnRep_Health를 다시 실행하면서 동기화가 일어난다.
물론 모든 변수를 Replicate하면 그것만한 낭비가 없기에 적절히 잘 쓰는것이 중요하다.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!실제로 사용해본 결과, Replicate 많이 사용하고 플레이어가 늘어날수록 연산이 기하급수적으로 늘어나기에, Server 부담이 심해지는 결과가 생긴다. 때문에 플레이어가 2인 정도 되면 Replicate 지이이이인짜 많이 써도 되는데, 3~4인 이상 8인 이상이되면 최대한 조심해서 사용하는게 좋을 거 같다.
'Unreal Engine 5 > 공부하기' 카테고리의 다른 글
언리얼 엔진 RPC(1) - 기본 이해 (0) | 2025.06.01 |
---|---|
언리얼 엔진 개발자의 Chat GPT 사용법(1) (1) | 2025.06.01 |
언리얼 엔진5 배우기 Collision 다루기 (0) | 2022.06.11 |