Settings

Global plugin configuration, under Project Settings → Plugins → Mova Interact. See Debug overlay & troubleshooting for the Debug category in practice and Multiplayer for the Network category.

class UMovaIxSettings : public UDeveloperSettings

Global configuration for the Mova Interact plugin.

Public Functions

UMovaIxSettings()
inline virtual FName GetCategoryName() const override
inline virtual FName GetSectionName() const override

Public Members

bool bAdvancedSettings = false

Reveal the advanced / rarely-used settings throughout this panel.

FString ActionsFileSuffix = TEXT("_Actions")

Filename suffix for the per-map Actions JSON, before ".json". Defaults to "_Actions".

FString ActionsFolderOverride

Folder the per-map Actions JSON is written to instead of next to the level.

  • Absolute, or project-relative.

  • Empty, the default, saves in ActionsSubfolder next to the level's .umap.

FString ActionsSubfolder = TEXT("_Ix")

Subfolder beside the level the Actions JSON is written into.

  • Defaults to "_Ix".

  • Ignored when ActionsFolderOverride is set.

bool bAutoDetectPreset = false

Re-detect the matching preset whenever the selected Component's Action data is edited (off = manual Detect only).

bool bBoundFilter = false

Display only the Components that are participating to the interactions.

float DetailsSplitRatio = 0.5f

Height ratio of the vanilla Components view vs the interactive properties view.

float MainSplitRatio = 0.35f

Height ratio of the main tree/list workspace vs the lower timeline section.

bool bPreviewing = false

Transient: true while the control panel is previewing an animation (gates real-object preview).

int32 PropertySearchFlags = 0 | static_cast<int32>(EMovaIxPropertySearchFlags::Advanced) | static_cast<int32>(EMovaIxPropertySearchFlags::More)

Which native Details search boxes are enabled in the Inspector's "More" and "Advanced" sections. Off by default.

bool bScrubbingTimeline = false

Transient: true while the user holds the mouse on the timeline (gates real-object preview).

bool bShowPresets = true

Show the Presets row (selector + Detect + Manage) at the top of the Control Panel.

bool bShowRuntime = false

Show Runtime properties.

bool bShowTimeline = false

Show the Timeline section (Group/Action combos + transport controls + Keyframe overlay).

EMovaIxTooltipTheme TooltipTheme = EMovaIxTooltipTheme::Dark

Look of the plugin's own structured hover tooltips, ex: the hierarchy panel's Actor row.

  • Light matches the Blueprint editor's Component tooltip, Dark matches the editor's default.

bool bShowCrosshair = false

Draws a crosshair at the center of the screen (player aim point).

FLinearColor CrosshairColor = FLinearColor(1.0f, 1.0f, 1.0f, 1.0f)

Color of the center crosshair.

float CrosshairDistance = 150.0f

Distance in front of the camera at which the center crosshair is drawn.

float CrosshairInterpolationSpeed = 18.0f

Crosshair camera-follow smoothing speed (QInterpTo).

  • 0 = rigid (jittery while turning). 15-25 = smooth.

float CrosshairSize = 0.015f

Crosshair half-extent as a fraction of distance (world half-size = Distance * CrosshairSize).

  • Keeps on-screen size roughly constant with distance.

float CrosshairThickness = 1.5f

Line thickness for both crosshairs.

float CrosshairVerticalOffset = 0.0f

Vertical screen offset for the center crosshair, as a fraction of its distance (positive = up).

  • Use it to raise the reticle in third person where the camera looks down.

  • 0 = exact screen center.

bool bImpactCrosshair = false

Draws a second crosshair on the point of impact of the currently targeted interactable.

  • Reuses the LOS trace point.

FLinearColor ImpactCrosshairColor = FLinearColor(0.0f, 1.0f, 0.0f, 1.0f)

Color of the impact-point crosshair.

bool bProjectedCrosshair = false

Draws a crosshair where the aim ray first hits world geometry (camera forward, or the cursor in cursor mode).

  • Unlike the impact crosshair, it does not snap to the targeted interactable.

FLinearColor ProjectedCrosshairColor = FLinearColor(1.0f, 0.85f, 0.2f, 1.0f)

Color of the projected crosshair.

float ProjectedCrosshairRange = 5000.0f

Max trace distance for the projected crosshair.

bool bDebugDraw = true

Universal toggle flag to run runtime viewport visibility diagnostics.

int32 DebugDrawFlags = 0 | static_cast<int32>(EMovaIxDebugDrawFlags::PointLine) | static_cast<int32>(EMovaIxDebugDrawFlags::PointSphere)

Active bitmask flag tracking choices evaluated during viewport debug steps.

bool bDebugScreen = false

Show the on-screen ScreenMessage debug overlays.

  • Server multicast, busy, etc.

  • Off keeps the screen clean.

bool bDebugSelection = false

Print the panel's own selection-routing diagnostics.

bool bDebugStates = false

Show the CurrentStates in the viewport, top-right panel.

bool bDebugTimings = false

Print per-step timings on screen when a selection changes.

EMovaIxLogVerbosity MinLogVerbosity = EMovaIxLogVerbosity::Log

Quiets routine plugin log output below this severity, ex: set to Warning to silence "SkipActionless" and similar skip-and-continue diagnostics while still seeing real warnings and errors. Independent of Unreal's own per-category console verbosity command.

float EyeHeightFactor = 0.87f

Eye height as a fraction of the pawn's capsule half-height, used as the interaction origin.

  • A Character's GetActorLocation is its capsule center, hip height, aiming from under the character.

  • 0.87 puts the origin a little below the top of the capsule, roughly where the eyes are.

  • 0 aims from the capsule center, which sits too low for a standing pawn.

float NoEyeOffset = -5.0f

Interaction-origin offset in cm for a pawn that is not a Character.

  • Ex: a flying sphere, or a custom Actor.

  • Such a pawn has no capsule to scale against.

float AnglePenaltyPerDegree = 25.0f

Off-center penalty in cm per degree, added to a candidate's distance when scoring. A Target N degrees off the aim is treated as N * this many cm farther away.

  • 0 = pure proximity. Higher = strongly prefer centered Targets.

EMovaIxChoiceInput ChoiceInput = EMovaIxChoiceInput::NumberKeys

How the player picks among a multi-choice interaction prompt.

  • NumberKeys: 1..0 select, handles 4+ choices.

  • LegacyKeys: Primary / Secondary / Ternary select choices 0 / 1 / 2.

bool bCollapseInteractions = false

Fold an Actor's several interaction points into one multi-choice query by default.

  • Great for a gamepad: aim roughly at the Actor, then pick a Target from a list, ex: which drawer.

  • A Component tagged "#unique" opts out, staying its own aim-selected point.

  • Per-IC Collapse = Always / Never overrides this default.

float RadialDeadZone = 0.25f

Radial-menu dead zone: a select direction shorter than this (0..1) highlights nothing.

  • Keeps a resting stick from picking a random choice.

float RadialStartAngleDeg = 0.0f

Radial-menu start angle in degrees, clockwise from straight up.

  • 0 puts the first choice at the top of the wheel.

float RadialMouseSensitivity = 0.15f

Radial wheel with a captured mouse cursor: how far raw mouse movement pushes the highlight. Higher values lock in a wedge with less mouse movement.

bool bUseMouseCursor = false

Show the mouse cursor and Target whatever it points at instead of the camera center. Cursor ray replaces the view-angle term in scoring.

  • Distance to the player still counts.

  • Map IA_Click to Left Mouse for click-to-interact.

  • IA_Click acts as IA_InteractPrimary only while this is on.

bool bAddressFieldChips = false

Show address fields (ex: Target) as chips, with the edit box hidden until the row is clicked.

  • Off: the edit box stays visible + a red chip only on an unresolved token.

  • On: every token shows as a classified chip, and clicking the row brings the box back.

TMap<FName, FLinearColor> SectionColors

Per-section header tints in the IC inspector.

  • Bright band behind each section title.

  • Keyed by section:

    • section.Cycles

    • section.Groups

    • section.States

    • section.Proximity

    • section.Transform

  • A multiplier on the native band:

    • White, the default, leaves it untinted.

    • Ex: yellow makes Action Cycles yellow.

  • An absent key = untinted.

TMap<FString, FString> ExtraOppositeWords

Extra verb/opposite word pairs, on top of the built-in table (Open<->Close, On<->Off, ...).

  • Used by "New Cycle..." to name the Close half from the entered Open half.

  • One direction per entry: add both "MyVerb"->"MyOpposite" and the reverse for symmetry.

  • Ex: { "Spin": "Unspin" } makes "DoorSpin" produce "DoorUnspin", not the "Undo" suffix.

TMap<FString, FString> ExtraStateWords

Extra verb/State word pairs, on top of the built-in table (Open->Opened, Close->Closed, ...).

  • Names the State a new Group reaches, ex: "DoorOpen" reaching "DoorOpened".

  • Overrides a built-in pair with the same key, and leaves the rest in place.

  • A verb with no natural participle can map to itself, ex: { "Spin": "Spin" }.

bool bServerVerifyRange = true

Verify on the Server that the interacting pawn is close enough to the Target before running a networked Action.

  • Blocks a modified client from triggering interactions across the map (remote-interaction exploit).

  • Check is lag-tolerant: it rejects and logs, it doesn't kick.

  • A laggy but valid player stays connected.

float ServerRangeSlack = 300.0f

Extra distance allowed beyond the interactor's detection radius for the server range check.

  • Absorbs client and server position lag: a valid interaction at the edge of range still passes.

  • 0 is the detection radius itself, a larger value more forgiving and slightly more exploitable.

bool bShowClosestOutline = true

Writes a custom-depth stencil on the closest interactable for a post-process material to outline. Requires:

  • Project Settings -> Rendering -> Custom Depth-Stencil Pass = "Enabled with Stencil".

  • An outline post-process material on an unbound PPV, CustomStencil == OutlineStencilValue.

int32 OutlineStencilValue = 1

Stencil value for the exact interacted Component (highest-opacity tier: "where" the interaction is).

int32 OutlineStencilValueGroup = 2

Stencil value for the rest of the interacted Group (best-Root children: mid tier, "what will move").

int32 OutlineStencilValueOther = 3

Stencil value for the Actor's other Components (lowest tier: "what is selected" at a glance).

float PromptScale = 1.0f

Uniform render scale applied to the interaction prompt widget (1 = native size, 0.5 = half).

bool bAutoKeyWhileRecording = false

While recording, keep sampling the tracked Components on a timer.

  • On: a pose is captured every RecordSampleInterval seconds, which tends to over-produce Keyframes.

  • Off, the default: ManualKeyframeHotkey captures only the intended poses.

float RecordSampleInterval = 0.05f

Sampling interval in seconds when bAutoKeyWhileRecording is on.

FKey ManualKeyframeHotkey = EKeys::K

Hotkey that captures one manual pose sample while recording.

  • Works whether bAutoKeyWhileRecording is off or on, harmless outside an active recording.

  • None disables the hotkey, leaving the Rec button and timer as the only way to sample.

FKey RecordToggleHotkey

Hotkey that starts and stops the Recorder, equivalent to clicking the Rec/Stop button.

  • None, the default, disables the hotkey, leaving the button as the only way to toggle recording.

bool bGenerateToggleOnRecord = true

On Stop, generate a full Toggle instead of one Group.

  • ActionCycle with 2 ActionGroups: the recorded motion, then a generated reverse with every State @Zero.

  • On, the default: "Rec, move it open, Stop" gives a working press-to-open press-to-close toggle.

  • Off: Stop generates only the one recorded Group, for a motion that is not meant to reverse.

TSoftClassPtr<UMovaIxComponent> InteractiveComponentClass

Interactive Component class added by the Control Panel's "Add Interactive Component" button. Points at a project Blueprint, ex: BP_InteractiveComponent, to add that instead of the C++ class.

FLinearColor AnimationColor = FLinearColor(0.0f, 0.8f, 1.0f, 0.6f)

Color of the animated preview box.

int32 AnimationPreview = 0 | static_cast<int32>(EMovaIxAnimationPreviewFlags::Ghost) | static_cast<int32>(EMovaIxAnimationPreviewFlags::RealObject)

How the live animation preview is shown: Ghost and/or the real moved object.

float AnimationThickness = 0.0f

Line thickness in the animated box.

bool bDrawProximityVolume = true

Draw the IC's self-contained proximity volume (auto Box/Sphere, or tagged level volumes) in the viewport.

bool bDrawRemoteTargetLine = true

Draw a line from the initiator to each resolved remote (^) Target Actor.

bool bDrawRemoteReach = true

Draw the IC's remote reach, RemoteMaxDistance, as a circle around the initiator.

  • Only drawn when that IC caps its reach, RemoteMaxDistance > 0.

  • A Target beyond the circle is signaled but ignored at runtime.

bool bEnableVisualizer = true

Enables the Component visualizer in the editor viewport.

FName IsolatedGroupName

Which Action Group to isolate in the editor visualizer.

  • None/All draws everything.

FLinearColor KeyframeColor = FLinearColor(1.0f, 0.4f, 0.0f, 0.25f)

Color of Keyframe ghost volumes.

FLinearColor PivotColor = FLinearColor(0.0f, 0.8f, 1.0f, 0.6f)

Color of the pivot gizmo.

FLinearColor ProximityVolumeColor = FLinearColor(0.2f, 1.0f, 0.5f, 1.0f)

Color of the IC's proximity volume wireframe.

FLinearColor RemoteLineColor = FLinearColor(1.0f, 0.9f, 0.0f, 1.0f)

Color of the line drawn from the initiator to a remote (^) Target Actor.

FLinearColor RemoteOutOfReachColor = FLinearColor(1.0f, 0.15f, 0.1f, 1.0f)

Color of a remote (^) Target that sits beyond the initiator's RemoteMaxDistance.

  • Red by default: the link is set, but the runtime refuses to signal it.

FLinearColor ShadowCircleColor = FLinearColor(0.0f, 0.8f, 1.0f, 0.1f)

Color of the ground-projection anchor circle.

FLinearColor ShadowLineColor = FLinearColor(1.0f, 1.0f, 1.0f, 0.1f)

Color of the ground-projection line.

int32 TrailCount = 8

Number of trails (ghosts) to draw.

int32 VisualizerDrawFlags = 0 | static_cast<int32>(EMovaIxVisualizerDrawFlags::Animation) | static_cast<int32>(EMovaIxVisualizerDrawFlags::PathLines)

Controls which visualizer elements are drawn in the editor viewport.

bool bShowTagTargetLabels = false

Draws a [TAG] or [Target] badge in the viewport over every Component of the selected Actor.

  • Yellow: has interaction tags.

  • Blue: is targeted by an Action.

  • Green: both.

  • Cyan: targeted by the isolated Group.

  • Gray: neither.

  • Clicking a badge selects that Component like clicking its row in the hierarchy.

bool bShowTagTargetType = true

Prints the role word, "[Tag]" or "[Target]", in front of each badge.

bool bShowTagTargetValues = false

Also print the Component's interaction tags next to its name, ex: "!Toggle !Toggle2". A Component's Target name is not printed, since it is always '@' + its own name.

float TagTargetLabelScale = 1.0f

Font scale for the [TAG] and [Target] badges.

float TagTargetLabelMaxDistance = 5000.0f

Beyond this distance the badges are not drawn.

  • A big level does not turn into soup.

  • 0 means no limit.

bool bShowChoicePreview = false

Prints the same numbered choice list a real player sees in the interaction prompt. Ex: "1 OpenLeft / 2 CloseLeft", or "(3) OpenRight" for a hold-to-confirm choice.

Public Static Functions

static void OpenSettings()

Opens the Project Settings window directly to this plugin's section.

enum class EMovaIxChoiceInput : uint8

How the player selects among a multi-choice interaction prompt.

Values:

enumerator NumberKeys

Number keys 1..0 pick a choice, ex: 1 = first, 2 = second. Handles more than 3 choices.

enumerator LegacyKeys

Primary / Secondary / Ternary keys pick choices 0 / 1 / 2, capped at 3.

enumerator RadialMenu

A radial wheel: a 2D direction (right stick / mouse) highlights a choice, the interact button confirms it.