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
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.
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
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):
AOmniWalkPlayerController. Implements the camera basis quaternions to prevent wall roll anomalies and upright vertical camera tracking.
AOmniWalkThirdPersonCharacter. Pre-wired with SpringArm camera components, Enhanced Input actions, and locomotion defaults.
AOmniWalkFirstPersonCharacter. Features eye-level camera components parented directly to the root capsule for immersive zero-g or vertical wall climbs.
AOmniWalkThirdPersonGameMode. CDO is automatically relinked to spawn the generated third-person pawn and player controller.
1-Click Production Setup Pipeline Flow
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
APlayerStartin 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'sAWorldSettings, 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
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
QueryAndPhysicswith a defaultBlockAllpreset, restoring dynamic adhesion parity instantly.
Trace Collision Scan Comparison
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_Defaultasset and copies it into your starter directory, then dynamically links it to theUOmniWalkSurfaceResponsecomponents 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
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
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
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.