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();
  }
}