Мне нужно найти мировую позицию / ориентацию гарнитуры VR (как Oculus, так и HTC), а затем установить актера в том же месте. Получение положения камеры, кажется, не работает в VR, поэтому я подумал, что этот код был правильным способом сделать это:
FQuat DeviceRotation;
FVector DevicePosition;
GEngine->XRSystem->GetCurrentPose(0, OUT DeviceRotation, OUT DevicePosition);
myActor->SetActorLocation(DevicePosition);
myActor->SetActorRotation(DeviceRotation);
Однако полученные координаты слишком малы по оси Z, и ориентация не соответствует должным образом.
Так, как правильно сделать это в C ++? Нужно ли как-то учитывать контроллер плеера?
UPDATE:
Если взглянуть на это подробнее, вам, похоже, нужно добавить позицию HMD, повернутую вращением пешки игрока:
FQuat DeviceRotation;
FVector DevicePosition;
FVector FinalPosition;
GEngine->XRSystem->GetCurrentPose(IXRTrackingSystem::HMDDeviceId, DeviceRotation, DevicePosition);
APlayerController *PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
FinalPosition = PlayerController->GetPawn()->GetActorRotation().RotateVector(DevicePosition) + PlayerController->PlayerCameraManager->GetCameraLocation();
myActor->SetActorLocation(FinalPosition);
myActor->SetActorRotation(DeviceRotation);
Однако результаты все еще не верны, так как кажется, что есть смещение вращения. У меня установлена камера для блокировки на HMD, поэтому я не уверен, что еще мне здесь не хватает.