我需要找到 VR 耳机(Oculus 和 HTC)的世界位置/方向,然后将演员设置在同一位置。获取相机的位置似乎在 VR 中效果不佳,所以我认为这段代码是正确的方法:
FQuat DeviceRotation;
FVector DevicePosition;
GEngine->XRSystem->GetCurrentPose(0, OUT DeviceRotation, OUT DevicePosition);
myActor->SetActorLocation(DevicePosition);
myActor->SetActorRotation(DeviceRotation);
但是,生成的 Z 轴坐标太低,方向不正确匹配。
那么在 C++ 中执行此操作的正确方法是什么?我是否需要以某种方式考虑播放器控制器?
更新:
更深入地研究这一点,您似乎必须添加由玩家 pawn 旋转旋转的 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,所以我不确定我还缺少什么。