C++ API, classes, and usage for Universal Virtual Cursor. Use this when extending or integrating the plugin in native code.
Module and include paths
Add UniversalVirtualCursor to your game module's Build.cs. Access UVirtualCursorSubsystem via ULocalPlayer::GetSubsystem<UVirtualCursorSubsystem>(). See the API reference for anchors.
Common includes: UniversalVirtualCursorSettings.h, VirtualCursorSubsystem.h, VirtualAnalogCursor.h, VirtualCursorDebug.h, Widgets/UniversalVirtualCursorWidget.h, Widgets/VirtualCursorParallaxOverlay.h, Widgets/VirtualCursorTargetComponent.h, UniversalVirtualCursorModule.h.
UVirtualCursorSubsystem
Primary runtime API. Key: EnableVirtualCursor, DisableVirtualCursor, GetOwningPlayerController, GetLocalSlateUserIndex, IsVirtualCursorActiveForSlateUser, IsVirtualCursorDrivingForSlateUser, SnapVirtualCursorToNearestTargetInDirection, SnapVirtualCursorToAdjacentSnapTarget, GetVirtualCursorTargetHostWidget, GetVirtualCursorTargetOuterFromHostParent, IsVirtualCursorTargetOverlapping. Delegates match the Blueprint page.
UUniversalVirtualCursorWidget
Drag/drop queries and target overlap events. Use when you need C++ hooks alongside UMG/Slate drag-drop.
UVirtualCursorTargetComponent
Component metadata for sticky slowdown and snap. GetOwningSubsystem() returns the owning UVirtualCursorSubsystem .
UVirtualCursorParallaxOverlay
Parallax overlay widget; properties mirror project defaults when bUseProjectParallaxDefaults is set.
UUniversalVirtualCursorSettings
Settings groups: Gamepad Detection, Virtual Cursor, Analog Cursor, Cursor Movement, Cursor Parallax — see the Settings page.
Utility types
FVirtualAnalogCursor — analog cursor simulation. Enum types: EUniversalVirtualCursorStickySlowdownSource , EUniversalVirtualCursorSnapDirection , EUniversalVirtualCursorSnapCycleDirection , EUniversalVirtualCursorSnapPoint , EUniversalVirtualCursorAnalogDriveMode .
Diagnostics helper
GetUniversalVirtualCursorTargetDebug() — aligns with the runtime target overlay; pair with UniversalVirtualCursor.TargetDebug.
Usage example
if (ULocalPlayer* LP = PC->GetLocalPlayer())
{
if (UVirtualCursorSubsystem* VCS = LP->GetSubsystem<UVirtualCursorSubsystem>())
{
VCS->EnableVirtualCursor();
const bool bDriving = VCS->IsVirtualCursorDrivingForSlateUser();
}
}