UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IMotionController.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "UObject/ObjectPtr.h"
9
10#include "IMotionController.generated.h"
11
12enum class EControllerHand : uint8;
13
14UENUM(BlueprintType)
16{
18 InertialOnly, //Note This value of the enum is deprecated and only used by legacy platforms. Please do not introduce new usages of it.
19 Tracked,
20};
21
38
48{
49public:
50 virtual ~IMotionController() {}
51
52 static inline FName FeatureName = FName(TEXT("MotionController"));
54 {
55 return FeatureName;
56 }
57
64
76 virtual bool GetControllerOrientationAndPosition(const int32 ControllerIndex, const FName MotionSource, FRotator& OutOrientation, FVector& OutPosition, float WorldToMetersScale) const = 0;
77
96
118
119 static inline FRotator AngularVelocityAsAxisAndLengthToRotator(const FVector AngularVelocityAsAxisAndLength)
120 {
121 FVector Direction;
122 double Angle;
123 AngularVelocityAsAxisAndLength.ToDirectionAndLength(Direction, Angle);
124 return FQuat(Direction, 1.0).Rotator() * Angle; // Note FQuat cannot represent >180 degree roration, so we build a quaternion of the correct axis for 1 radian and then scale the resulting rotator by the actual number of radians.
125 }
126
132 virtual ETrackingStatus GetControllerTrackingStatus(const int32 ControllerIndex, const FName MotionSource) const = 0;
133
140
150 virtual float GetCustomParameterValue(const FName MotionSource, FName ParameterName, bool& bOutValueFound) const = 0;
151
152 virtual bool GetHandJointPosition(const FName MotionSource, int jointIndex, FVector& OutPosition) const = 0;
153
162 virtual bool SetEnhancedInputUserSettings(TObjectPtr<class UEnhancedInputUserSettings> InputSettings = nullptr) { return true; };
163
173
174 // explicit source names
178 static HEADMOUNTEDDISPLAY_API FName HeadSourceId; // Note Head and HMD are interchangable. HMD is the legacy term.
179
181};
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ETrackingStatus
Definition IMotionController.h:16
EControllerHand
Definition InputCoreTypes.h:17
UE::Math::TQuat< double > FQuat
Definition MathFwd.h:50
#define UENUM(...)
Definition ObjectMacros.h:749
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition IModularFeature.h:12
Definition IMotionController.h:48
static HEADMOUNTEDDISPLAY_API FName RightHandSourceId
Definition IMotionController.h:176
static HEADMOUNTEDDISPLAY_API FName LeftHandSourceId
Definition IMotionController.h:175
virtual ~IMotionController()
Definition IMotionController.h:50
static HEADMOUNTEDDISPLAY_API FName HMDSourceId
Definition IMotionController.h:177
virtual bool GetControllerOrientationAndPositionForTime(const int32 ControllerIndex, const FName MotionSource, FTimespan Time, bool &OutTimeWasUsed, FRotator &OutOrientation, FVector &OutPosition, bool &OutbProvidedLinearVelocity, FVector &OutLinearVelocity, bool &OutbProvidedAngularVelocity, FVector &OutAngularVelocityAsAxisAndLength, bool &OutbProvidedLinearAcceleration, FVector &OutLinearAcceleration, float WorldToMetersScale) const =0
virtual bool SetEnhancedInputUserSettings(TObjectPtr< class UEnhancedInputUserSettings > InputSettings=nullptr)
Definition IMotionController.h:162
static HEADMOUNTEDDISPLAY_API FName HeadSourceId
Definition IMotionController.h:178
virtual FName GetMotionControllerDeviceTypeName() const =0
static FName GetModularFeatureName()
Definition IMotionController.h:53
virtual ETrackingStatus GetControllerTrackingStatus(const int32 ControllerIndex, const FName MotionSource) const =0
virtual bool AttachInputMappingContexts(const TSet< TObjectPtr< class UInputMappingContext > > &InputMappingContexts)
Definition IMotionController.h:172
static HEADMOUNTEDDISPLAY_API bool GetHandEnumForSourceName(const FName Source, EControllerHand &OutHand)
Definition IMotionController.cpp:13
virtual void EnumerateSources(TArray< FMotionControllerSource > &SourcesOut) const =0
static FRotator AngularVelocityAsAxisAndLengthToRotator(const FVector AngularVelocityAsAxisAndLength)
Definition IMotionController.h:119
virtual bool GetControllerOrientationAndPosition(const int32 ControllerIndex, const FName MotionSource, FRotator &OutOrientation, FVector &OutPosition, bool &OutbProvidedLinearVelocity, FVector &OutLinearVelocity, bool &OutbProvidedAngularVelocity, FVector &OutAngularVelocityAsAxisAndLength, bool &OutbProvidedLinearAcceleration, FVector &OutLinearAcceleration, float WorldToMetersScale) const =0
static FName FeatureName
Definition IMotionController.h:52
virtual bool GetHandJointPosition(const FName MotionSource, int jointIndex, FVector &OutPosition) const =0
virtual float GetCustomParameterValue(const FName MotionSource, FName ParameterName, bool &bOutValueFound) const =0
virtual bool GetControllerOrientationAndPosition(const int32 ControllerIndex, const FName MotionSource, FRotator &OutOrientation, FVector &OutPosition, float WorldToMetersScale) const =0
Definition Array.h:670
Definition IMotionController.h:28
FMotionControllerSource(FName InSourceName=NAME_None)
Definition IMotionController.h:34
FName SourceName
Definition IMotionController.h:29
Definition Timespan.h:76
Definition ObjectPtr.h:488
CORE_API TRotator< T > Rotator() const
void ToDirectionAndLength(TVector< T > &OutDir, double &OutLength) const
Definition Vector.h:1792