在 Unreal 中使用 C++ 而非蓝图的 MotionController 组件
Using a MotionController Component in Unreal with C++ instead of Blueprint
在遍历 OculusInputDevice IMotionController
的 FMotionControllerSource
数组后,我根据它的 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);
在遍历 OculusInputDevice IMotionController
的 FMotionControllerSource
数组后,我根据它的 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);