본문 바로가기

Unreal Engine 5/공부하기

언리얼 엔진 RPC(2) - OnRep

반응형

이제 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인 이상이되면 최대한 조심해서 사용하는게 좋을 거 같다.

반응형