在 Unreal 中使用 C++ 而非蓝图的 MotionController 组件

Using a MotionController Component in Unreal with C++ instead of Blueprint

在遍历 OculusInputDevice IMotionControllerFMotionControllerSource 数组后,我根据它的 ETrackingStatus 找到了一个已连接的 Oculus 左右触控控制器。使用左右控制器,我可以使用 IMotionController API 获取位置和旋转,其中 Returns the calibration-space orientation of the requested controller's hand.

这是对 IMotionController API 的引用: https://docs.unrealengine.com/en-US/API/Runtime/HeadMountedDisplay/IMotionController/index.html

我想将 location/rotation 应用到 PosableMesh,以便在实际 Oculus 控制器所在的位置显示网格。目前,使用下面的代码,3D 模型从相机向下显示,因此映射比例关闭。我认为 WorldToMetersScale 可能会关闭。当我使用较小的数字时,控制器不会移动 3D 模型太多,但这可能会搞砸它。

            FVector position;
            FRotator rotation;
            int id = tracker.deviceIndex;
            FName srcName = tracker.motionControllerSource;
            bool success = tracker.motionController->GetControllerOrientationAndPosition(id, srcName, rotation, position, 250.0f);
            if (success)
            {
                poseMesh->SetWorldLocationAndRotation(position, rotation);
            }

将相机位置添加到控制器位置似乎可以解决问题:

// get camera reference during BeginPlay:
camManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager;

// TickComponent
poseMesh->SetWorldLocationAndRotation(camManager->GetCameraLocation() + position, rotation);