Get on Fab
OmniWalk Full Logo

OmniWalk Setup Wizard

Welcome to the OmniWalk Setup Wizard Operations Manual. This guide provides a comprehensive technical breakdown of the integrated onboarding utility designed to dynamically audit worlds, configure input projection pipelines, bind physical material tables, inject pre-tuned locomotion archetypes, and launch real-time telemetry instantly.

Locating the utility inside the Unreal Editor is straightforward. Navigate to the top menu bar and select Window → OmniWalk → OmniWalk Setup Wizard. The wizard operates in two distinct, production-hardened modes:

Project Setup Mode

Targeted at production environments. It designs and writes custom locomotion Blueprint subclasses directly into your game's folders, linking default GameModes, player controllers, and pawn setups cleanly without clobbering existing codebase logic.

Example Tools Mode

Targeted at quick visual onboarding. Generates temporary, isolated linear tutorial meshes, lighting actors, and sandbox maps. This allows level designers to test mechanics out-of-the-box in seconds before full configuration.

Setup Wizard Architecture & Blueprint Linkage

SOmniWalkSetupWizard Slate Widget UI Nomad Tab / Widget Layouts FOmniWalkSetupWizardUtility C++ Engine Logic Asset Generation / Audit Sweep Blueprint Assets (CDO) BP_OW_Character / BP_OW_GM Level Actor Instances AStaticMeshActor / Characters

The wizard Slate UI delegates all complex asset planning, auditing, and scene modifications to the robust native C++ utility layer.

Slate UI Anatomy

The Slate tab is carefully structured into collapsable segments with helpful descriptions, key parameters, and safety feedback logs, ensuring that developers are fully aligned at each stage.

Tip: Use Tooltips!

Every core action button in the wizard includes a detailed ToolTipText pop-up. Simply hover your mouse over any button (such as "Generate Playable Third-Person Setup") to preview exactly which assets will be generated or modified before clicking.

SOmniWalkSetupWizard Tab Layout Map

OMNIWALK SETUP WIZARD Production Suite PROJECT SETUP /Game/OmniWalkSetup Folder Path Generate Playable Third-Person Setup Generate Playable First-Person Setup Override Level GameMode on Generation ADVANCED LOCOMOTION TOOLS Auto-Configure Input Audit & Fix Level Collisions Create & Bind Default Response Table Wall Runner Apply Preset Launch Visual Telemetry Debugger → DIAGNOSTIC TELEMETRY CONSOLE: [SUCCESS] Created /Game/OmniWalkSetup/BP_OW_ThirdPersonCharacter.uasset [WARN] Collision scan detected (3) StaticMeshActors set to NoCollision [INFO] Locomotion preset 'Wall Runner' applied to BP_OW_ThirdPersonCharacter

SOmniWalkSetupWizard's intuitive visual layout. Features grouped parameter configuration boxes, drop-downs for preset selections, and active console output arrays.

Core Setup Pipeline

By default, the Setup Wizard plans and creates four essential starter Blueprints that inherit from our native C++ classes, saving them in a target folder you choose (e.g. /Game/OmniWalkSetup):

🎮 BP_OW_PlayerController Parented to AOmniWalkPlayerController. Implements the camera basis quaternions to prevent wall roll anomalies and upright vertical camera tracking.
🚶 BP_OW_ThirdPersonCharacter Parented to AOmniWalkThirdPersonCharacter. Pre-wired with SpringArm camera components, Enhanced Input actions, and locomotion defaults.
🤠 BP_OW_FirstPersonCharacter Parented to AOmniWalkFirstPersonCharacter. Features eye-level camera components parented directly to the root capsule for immersive zero-g or vertical wall climbs.
🏆 BP_OW_ThirdPersonGameMode Parented to AOmniWalkThirdPersonGameMode. CDO is automatically relinked to spawn the generated third-person pawn and player controller.

1-Click Production Setup Pipeline Flow

Step 1: Set Path Choose Target Folder e.g. /Game/Locomotion Step 2: Generate Create Blueprint Pawns & Controller Classes Step 3: CDO Linkage Bind GameMode CDO Assigned Player & Pawns Step 4: Overrides Override World Settings Press Play (PIE) Active!

Complete end-to-end 1-click wizard setup. Automatically generates custom subclasses, resolves default settings, overrides world settings, and activates PIE gameplay.

When clicking Generate Playable First-Person Setup or Generate Playable Third-Person Setup, the wizard completes a series of non-destructive operations:

  • Creates all starter Blueprints in your designated root path (avoiding duplicate naming conflicts).
  • Links the custom Player Controller and Pawn subclasses to the GameMode CDO and compiles it programmatically in the Editor context.
  • Spawns a functional APlayerStart in your persistent level (intelligently reusing an existing one if present to prevent spawning overlapping spawners).
  • Overrides the level GameMode to the generated BP_OW_ThirdPersonGameMode (or First-Person) inside the world's AWorldSettings, so pressing Play (PIE) instantly spawns you with fully operational gravity-relative locomotion.

Advanced Locomotion Tools

The Setup Wizard features an expandable Advanced Locomotion Tools section, exposing five dynamic Slates designed to automate common onboarding snags. Let's explore their inner C++ logic, parameters, and visual behavior.

1. Enhanced Input Configurator & WASD Project-Fix

Standard XY raw movement nodes in standard Unreal Engine templates (such as the default BP_ThirdPersonCharacter) project raw input onto the global XY plane. Under arbitrary gravity (e.g., standing perpendicular on a vertical wall), this results in completely restricted vertical movement because the projection dot-product of forward input against the gravity plane drops to zero.

The Auto-Configure Selected Inputs button scans level character selections or selected Content Browser Blueprints, and dynamically enables the internal raw input correction pipeline on their UOmniWalkPro components.

Input Projection Comparison

Legacy XY Input Projection (Failure) World XY Plane Vertical Wall Pressed Forward (Blocked by Axis) OmniWalk Raw Input Fix (Success) Surface Slope Plane Vertical Wall Upright Adhesion Movement

Enabling bUseInternalInputFix intercepts raw input vectors and projects them onto the active gravity plane, restoring 360-degree locomotion on walls.

// FOmniWalkSetupWizardUtility C++ Logic
FOmniWalkSelectionTagResult FOmniWalkSetupWizardUtility::AutoConfigureEnhancedInputForSelection()
{
    TArray SelectedAssets = GetSelectedAssetsOfClass(UBlueprint::StaticClass());
    int32 ModifiedCount = 0;

    for (UObject* Asset : SelectedAssets)
    {
        UBlueprint* BP = Cast(Asset);
        if (BP && BP->GeneratedClass && BP->GeneratedClass->IsChildOf(ACharacter::StaticClass()))
        {
            ACharacter* CDO = Cast(BP->GeneratedClass->GetDefaultObject());
            if (CDO)
            {
                if (UOmniWalkPro* Pro = CDO->FindComponentByClass())
                {
                    Pro->bUseInternalInputFix = true;
                    Pro->bProjectGravityFromSurface = true;
                    FBlueprintEditorUtils::MarkBlueprintAsModified(BP);
                    ModifiedCount++;
                }
            }
        }
    }
    return FOmniWalkSelectionTagResult(true, ModifiedCount);
}

2. Physics Collision Profile & Level Mesh Auditor

OmniWalk adhesion relies on multi-point trace and sphere-cast sweeps. Level designers frequently place decorative static meshes or geometry blocks that have their collision presets set to NoCollision. When players walk onto these surfaces, trace sweeps will ignore them entirely, causing immediate dismounts, floating errors, or falling through the level.

The Collision Auditor panel solves this with two automated operations:

  • Audit Level Collisions: Scans all static mesh actors in the persistent level, reporting the exact number of meshes set to NoCollision.
  • Fix Level Collisions: Programmatically modifies level meshes flagged with NoCollision, setting their profile to QueryAndPhysics with a default BlockAll preset, restoring dynamic adhesion parity instantly.

Trace Collision Scan Comparison

Case A: Static Mesh set to NoCollision StaticMesh [NoCollision Profile] Trace ignores mesh... Pawn Falling! Case B: Fixed to QueryAndPhysics BlockAll StaticMesh [BlockAll Profile] Trace Hit Confirmed! Pawn Normal Vector (Upwards)

Contrasting NoCollision (failure to adhere) with QueryAndPhysics BlockAll (successful normal vector retrieval and adhesion alignment).

// FOmniWalkSetupWizardUtility C++ Logic
FOmniWalkCollisionAuditResult FOmniWalkSetupWizardUtility::AuditLevelCollisions(bool bFixSettings)
{
    UWorld* World = GEditor->GetEditorWorldContext().World();
    if (!World) return FOmniWalkCollisionAuditResult(false, 0);

    int32 FoundCount = 0;
    for (TActorIterator It(World); It; ++It)
    {
        AStaticMeshActor* Actor = *It;
        if (Actor && Actor->GetStaticMeshComponent())
        {
            UStaticMeshComponent* SMC = Actor->GetStaticMeshComponent();
            if (SMC->GetCollisionEnabled() == ECollisionEnabled::NoCollision)
            {
                FoundCount++;
                if (bFixSettings)
                {
                    SMC->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
                    SMC->SetCollisionProfileName(UCollisionProfile::BlockAll_ProfileName);
                    Actor->MarkPackageDirty();
                }
            }
        }
    }
    return FOmniWalkCollisionAuditResult(true, FoundCount);
}

3. Dynamic Material Surface Response Table Configurator

The surface response table (UOmniWalkSurfaceResponseTable) allows developers to specify custom traction multipliers, deceleration rates, dismount angles, and slide speeds based on physical materials.

The configurator lets you:

  • Create & Bind Default Response Table: Auto-generates a custom SRT_OmniWalk_Default asset and copies it into your starter directory, then dynamically links it to the UOmniWalkSurfaceResponse components of your selected actors.
  • Bind Existing Response Table: Scans the target folder and maps the table to selected assets to prevent duplicate SRT creations.

Surface Response Table Routing Pipeline

1. Line Trace Hit FHitResult.PhysMaterial Ice / Concrete / Steel 2. SRT Lookup FindRow(PhysMaterial) Resolves Traction Data 3. Modify Locomotion Adhesion / Decel Multipliers e.g. Slide on Ice 4. Output VFX & SFX Spawns Dynamic Footsteps

Dynamic material data lookup cycle. Trace reads level materials, maps indices to the SRT configuration rows, and overrides gravity locomotion parameters instantly.

4. Locomotion Presets Injector

Tuning arbitrary gravity locomotion variables is a highly subjective task. The wizard includes an optimized locomotion preset injector dropdown supporting four production-ready archetypes:

Locomotion Preset Primary Settings Configured Target Locomotion Style
Spider Climber bEnableConvexTraversals=true
ConvexCheckDistance=120.0f
SurfaceLossGraceSeconds=0.5f
AdhesionForce=5000.0f
Extreme wall and ceiling climbing with aggressive 90-degree corner transition sweeps.
Wall Runner bAutoEnableWallSlide=true
WallSlideSpeed=400.0f
WallSlideAcceleration=2000.0f
bWallSlideResistsInput=true
Momentum-based horizontal wall sliding where players can hold "up" to resist gravity sliding.
Zero-G Float bProjectGravityFromSurface=false
bEnableConvexTraversals=false
SurfaceLossGraceSeconds=1.5f
DismountIgnoreSeconds=0.5f
Free volume-based orbital flight or spacecraft interior traversal.
Standard Adhesion bEnableConvexTraversals=true
ConvexCheckDistance=60.0f
SurfaceLossGraceSeconds=0.2f
bAutoEnableWallSlide=false
Forgiving wall alignment and traversal designed for standard gameplay footing.

Visualizing Locomotion Presets

Spider Climber Ceiling Adhesion Upside-Down Wall Runner Perpendicular Wall Climb Transition Zero-G Float Floating in Volume Gravity = 0.0

Illustrating locomotion archetypes. Spider Climber adheres upside down on ceilings, Wall Runner slides on vertical walls, and Zero-G Float traverses inside gravity-free volumes.

5. Direct Telemetry Debugger Launcher

Clicking the Launch Telemetry Debugger button invokes the real-time visual Slate debugger nomad tab:

FGlobalTabmanager::Get()->TryInvokeTab(FTabId("OmniWalkDebugger"));

This opens a diagnostic tab next to the editor viewports displaying live vector projections for the gravity direction, surface normal, and alignment dot-product parameters, simplifying game design fine-tuning.

C++ Automated Unit Testing

All Setup Wizard operations and advanced tools are verified by a comprehensive automated test suite inside OmniWalkSetupWizardTests.cpp.

The FOmniWalkSetupWizardAdvancedExtensionsTest dynamically spawns pure C++ actor instances in offline editor worlds, programmatically selects them, and validates the advanced locomotion preset parameters, raw input projection switches, and level collision audits:

IMPLEMENT_SIMPLE_AUTOMATION_TEST(
	FOmniWalkSetupWizardAdvancedExtensionsTest,
	"OmniWalk.Editor.SetupWizard.AdvancedExtensions",
	EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)

bool FOmniWalkSetupWizardAdvancedExtensionsTest::RunTest(const FString& Parameters)
{
	UWorld* World = FAutomationEditorCommonUtils::CreateNewMap();
	AOmniWalkExampleCharacter* ExampleCharacter = World->SpawnActor(
		AOmniWalkExampleCharacter::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator);

	// Select actor programmatically
	GEditor->SelectActor(ExampleCharacter, true, true);

	// Verify locomotion preset application
	FOmniWalkPresetResult PresetResult = FOmniWalkSetupWizardUtility::ApplyLocomotionPresetToSelection(EOmniWalkPreset::WallRunner);
	TestTrue(TEXT("Preset applied successfully"), PresetResult.bSuccess);

	// Verify input configuration fix
	FOmniWalkSelectionTagResult InputResult = FOmniWalkSetupWizardUtility::AutoConfigureEnhancedInputForSelection();
	TestEqual(TEXT("Character modified by input config"), InputResult.TaggedCount, 1);

	return true;
}

C++ API Reference

Below is the C++ API signature for the advanced wizard extensions declared in OmniWalkSetupWizardUtility.h:

// Selection Input Projection Fix
static FOmniWalkSelectionTagResult AutoConfigureEnhancedInputForSelection();

// Level Collision Channel & Presets Auditor
static FOmniWalkCollisionAuditResult AuditLevelCollisions(bool bFixSettings);

// Material Response Table Creator & CDO Binder
static FOmniWalkResponseTableResult ConfigureOrCreateSurfaceResponseTable(const FString& TargetFolder, bool bCreateIfMissing);

// Locomotion Preset Selection Writer
static FOmniWalkPresetResult ApplyLocomotionPresetToSelection(EOmniWalkPreset Preset);

// Live Telemetry Tab Invoker
static void LaunchTelemetryDebugger();

Troubleshooting

Folder Generation Fails

Symptom: Pressing "Generate" returns a directory write error.

Cause: The target folder might reside in a read-only subdirectory, or your project relies on Source Control (Perforce/Git) with checked-in locks.

Fix: Ensure the project directory has write permissions. If using Git/P4, check out the target directory context prior to clicking generate.

Input Config Ineffectual

Symptom: Checking WASD input fix has no effect on selected characters.

Cause: Character Blueprints must have their parent classes set to subclasses containing a UOmniWalkPro component. If the Blueprint inherits from standard engine ACharacter, the injector will skip modifications.

Fix: Double check character parents, or reparent the character to AOmniWalkableCharacter prior to running the advanced input injector.

Support & Legal

About

Budapest, HU

GregOrigin

Created by Andras Gregori @ Gregorigin, a single dad currently based outside Budapest, HU.

"Building tools that empower creators to shape worlds."

Disclaimers

OmniWalk ships as a C++ plugin for Unreal Engine 5.4+ and requires a C++ compile step on first install in a Blueprint-only project.

Always test your surfaces with representative collision meshes. Highly irregular normals can produce jitter without multi-point averaging.

Because setup varies across projects, engines, and input stacks, integration can take iteration; if you hit snags, reach out before considering a refund—most issues are solvable with a quick config pass.