-
Actor Replication Frequency & InterpolationUnreal Engine 2024. 4. 20. 16:52
NetUpdateFrequency: 리플리케이션 빈도의 최대치를 설정함
- 1초당 몇 번 리플리케이션을 시도할지 지정한 값
- 기본 값은 100이며, 이론적으로 서버는 0.01초 간격으로 리플리케이션을 시도함
- 다만, 이는 최대치일 뿐 이를 보장하지 않으며 서버의 성능으로 복제됨
리플리케이션 빈도를 줄이고, 서버에서 데이터를 받지 않는 공백에 움직임을 보간하는 작업을 추가하면 부드러운 움직임을 낼 수 있음.
public: float RotationRate = 30.0f; float ClientTimeSinceUpdate = 0.0f; // 서버로부터 패킷을 받은 후 지난 시간 float ClientTimeBetweenLastUpdate = 0.0f; // 서버로부터 패킷을 받은 후 다음 패킷을 받을 때까지 걸린 시간
void AABFountain::Tick(float DeltaTime) { Super::Tick(DeltaTime); if (HasAuthority()) { AddActorLocalRotation(FRotator(0.0f, RotationRate * DeltaTime, 0.0f)); ServerRotationYaw = RootComponent->GetComponentRotation().Yaw; } else { ClientTimeSinceUpdate += DeltaTime; if (ClientTimeBetweenLastUpdate < KINDA_SMALL_NUMBER) { return; } const float EstimateRotationYaw = ServerRotationYaw + RotationRate * ClientTimeBetweenLastUpdate; const float LerpRatio = ClientTimeSinceUpdate / ClientTimeBetweenLastUpdate; FRotator ClientRotator = RootComponent->GetComponentRotation(); const float ClientNewYaw = FMath::Lerp(ServerRotationYaw, EstimateRotationYaw, LerpRatio); ClientRotator.Yaw = ClientNewYaw; RootComponent->SetWorldRotation(ClientRotator); } }
적응형 네트워크 업데이트(Adaptive Network Update)
- 유의미한 업데이트가 없으면 빈도를 줄여서 부하를 줄이는 기법
- MinNetUpdateFrequency: 리플리케이션 빈도의 최소치 설정을 사용함
- 최소 값과 최대 값 사이에서 현재 액터에 맞는 최적의 전송 타이밍을 설정하며, 직접 활성화시켜 줘야 사용 가능
DefaultEngine.ini
[SystemSettings]
net.UseAdaptiveNetUpdateFrequency=1
'Unreal Engine' 카테고리의 다른 글
Actor Priority & Dormancy(휴면) (0) 2024.04.20 Actor Replication's Relevancy (0) 2024.04.20 Unreal Insight (0) 2024.04.20 1초마다 실행하는 함수 (0) 2024.04.18 Actor Replication (0) 2024.04.18