
Actor 복제(Replication)를 위해 중요한 두 가지 속성(Role and RemoteRole)이 더 있습니다.
이 두 속성은 다음과 같은 정보를 알려줍니다:
가장 먼저 확인해야 할 것은 특정 Actor에 대한 권한이 누구에게 있는지입니다.
현재 실행 중인 엔진 인스턴스가 권한을 가지고 있는지 확인하려면, role 속성이 ROLE_Authority인지 확인하세요.
만약 그렇다면, 이 엔진 인스턴스가 이 Actor를 담당하고 있다는 의미입니다(복제 여부와 상관없이!).
💡 info
이것은 소유권(Ownership)과는 다릅니다!
Role과 RemoteRole은 이 값을 확인하는 주체에 따라 반전될 수 있습니다.
예를 들어, 서버에서 다음과 같은 구성이 있다고 가정해봅시다:
그러면 클라이언트에서는 이렇게 보입니다:
이는 서버가 Actor를 관리하고 클라이언트에 복제하기 때문입니다.
클라이언트는 단순히 업데이트를 받고, 업데이트 사이에 Actor를 시뮬레이션합니다.
서버는 매 업데이트마다 Actor를 업데이트하지 않습니다. 그렇게 하면 너무 많은 대역폭과 CPU 자원이 소모되기 때문입니다. 대신, 서버는 'AActor::NetUpdateFrequency' 속성에 지정된 빈도로 Actor를 복제합니다.
이로 인해 클라이언트에서는 Actor 업데이트 사이에 시간이 지나게 됩니다. 이로 인해 Actor의 움직임이 불규칙하거나 끊겨 보일 수 있습니다. 이를 보완하기 위해 클라이언트는 업데이트 사이에 Actor를 시뮬레이션합니다.
현재 두 가지 유형의 시뮬레이션이 있습니다:
이것은 표준 시뮬레이션 경로로, 일반적으로 마지막으로 알려진 속도를 기반으로 움직임을 예측합니다.
서버가 특정 Actor에 대한 업데이트를 보내면, 클라이언트는 해당 위치로 Actor의 위치를 조정하고, 업데이트 사이에는 서버에서 전달된 가장 최근 속도를 기반으로 Actor를 계속 움직입니다.
마지막으로 알려진 속도를 사용한 시뮬레이션은 일반적인 시뮬레이션 방식의 한 예일 뿐입니다.
서버 업데이트 사이에 다른 정보를 사용하여 예측하는 커스텀 코드를 작성할 수도 있습니다.
이것은 일반적으로 PlayerController가 소유한 Actor에만 사용됩니다.
즉, 이 Actor가 실제 플레이어의 입력을 받고 있다는 의미입니다. 따라서 예측할 때, 마지막으로 알려진 속도 대신 실제 플레이어의 입력 정보를 활용하여 누락된 정보를 보완할 수 있습니다.