Overview
HoverDrive is a movement component for pawns that are not characters: anything whose root is a physics body. It never moves the actor kinematically; every effect is a force or torque on the body, so collisions, ramps, impacts and stacking behave physically. All tuning values are accelerations (cm/s²) multiplied by the body's mass, so a 200 kg bike and a 20 t tank feel the same with the same settings.
- 1. Hover points: any number of spring-damper raycast thrusters, placed by socket or relative offset (four are generated automatically).
- 2. Hover Drive Pawn: physics hull, visual body, chase camera and default bindings; throttle, strafe, turn and lift functions.
- 3. Banking: visual roll into turns and pitch under acceleration, with limits.
- 4. Altitude hold and terrain following: configurable hover height, height range, maximum slope, flight altitude hold.
- 5. Flight mode: full 6-DOF drone / flyer control with stabilised hovering in place.
- 6. Boost: energy pool, drain, recharge delay and rate.
- 7. Drift and air brake: lateral grip control and drag multiplier.
- 8. Water and surfaces: hover over a dedicated liquid trace channel and per physical-surface rules.
- 9. Auto-level: PID roll / pitch stabilisation with strength settings.
- 10. Influence volumes: wind with gusts, lift and gravity scaling inside an area.
- 11. Thruster output per point (0-1) and events for VFX and audio, including landing impacts.
- 12. Grounded / airborne state with events and an air control factor.
- 13. Telemetry struct and getter.
- 14. Networking: server-authoritative input replication; physics on the server, movement replicated by the engine.
- 15. Debug view: console variable
HoverDrive.Debugdraws rays, forces and telemetry (non-shipping).
Requirements
| Requirement | Details |
|---|---|
| Unreal Engine | 4.27 (PhysX) and 5.8 (Chaos). Only engine-level physics calls are used (forces, torques, traces), so the behaviour is the same on both physics engines. |
| Module | HoverDrive (Runtime) |
| Dependencies | None (engine modules only; no other plugins are enabled) |
| Body | Any actor whose root (or chosen) primitive component simulates physics. No content assets are shipped; the Hover Drive Pawn shows the engine cube until you assign your own mesh. |
| Platforms | Win64 and Mac (the module lists these platforms in the plugin descriptor). The code is platform-independent engine C++ with no OS-specific calls. |
| Network Replicated | Yes: input travels to the server by RPC, the server simulates, mode / energy / boost replicate, movement is replicated by the engine's physics replication. |
Installation
- Install HoverDrive from Fab into your engine, or copy the
HoverDrivefolder into your project'sPluginsfolder. - Enable HoverDrive in Edit > Plugins and restart the editor.
- C++ only: add
PublicDependencyModuleNames.Add("HoverDrive");to yourBuild.cs.
Quick start
- Create a Blueprint class from Hover Drive Pawn (or use the C++ class directly).
- Optionally assign your craft's mesh to Body Mesh (reset its scale, which is set to fit the placeholder cube) and resize Hull (Box Extent) to fit it.
- Set it as Default Pawn Class of your game mode, or place it in the level with Auto Possess Player = Player 0.
- Press Play: W/S throttle, A/D turn, Q/E strafe, Space/Ctrl hover height, Shift boost, Alt drift, X air brake, T flight mode (then R/F pitch, Z/C roll). Gamepads work too (see Input reference).
- Type
HoverDrive.Debug 2in the console to see rays, forces and live telemetry.
1. Hover points
Component UHoverDriveComponent — displayed as Hover Drive. Each hover point traces straight down from the craft (along its own down axis). When the trace finds a surface, the point pushes up along the craft's up axis with a spring-damper force: it carries its share of the weight exactly at the hover height, pushes harder when compressed and softer when extended, and damping removes bounce.
Per point: accel = share × g × (1 + Spring Stiffness × compression) − Spring Damping × share × vertical point speed, with compression = (height − distance) / height, applied at the thruster location.
| Property | Default | Description |
|---|---|---|
| Hover Points | empty | Array of FHoverDrivePoint: Socket (used when it exists on the physics body), Offset (relative to the body, used otherwise) and Force Scale (relative share of the weight, 1). When empty, four points are generated at 80% of the body's bottom corners. |
| Hover Height | 100 cm | Start hover height (see Altitude). |
| Max Hover Distance | 300 cm | Trace length; beyond it a point is airborne. Always at least 1.5 × the current hover height. |
| Spring Stiffness | 3 | Dimensionless: extra force per unit of compression relative to the weight-carrying force. |
| Spring Damping | 6 /s | Removes vertical speed at the points. |
| Trace Channel | Visibility | Channel of the hover traces. |
| Trace Radius | 0 | 0 = line traces; > 0 = sphere sweeps of that radius (smoother over gaps, grates and edges). |
| Physics Target | owner's root | The physics body driven. Set Physics Target changes it at runtime. |
Nodes: call Set Hover Points (empty = automatic corners), pure Get Hover Point Count, Get Point States, Get Point Location.
2. Hover Drive Pawn
Pawn AHoverDrivePawn — displayed as Hover Drive Pawn. Components:
| Component | Setup |
|---|---|
| Hull (Box, root) | Extent 160 × 100 × 35 cm, profile PhysicsActor, Simulate Physics on, mass 800 kg, linear damping 0.05, angular damping 0.5, hidden in game. |
| Body Mesh | Static mesh attached to the hull, no collision; the engine cube scaled to the hull until you assign your own. It is the hover drive's Banking Target. |
| Camera Boom / Camera | Chase camera: arm 900 cm, pitch -15°, socket offset 120 cm up, position and rotation lag 6, does not inherit pitch or roll. |
| Hover Drive | The movement component. |
Input functions (call, Blueprint and C++): Throttle, Strafe, Turn, Lift, Pitch, Roll (float -1..1), Boost, Drift, Air Brake (bool held), Toggle Flight Mode. pure Get Hover Drive returns the component.
Use Default Input Bindings (on) registers the HoverDrive_* axis and action mappings at runtime (no project input settings needed) and binds them. Turn it off when you use Enhanced Input or your own bindings and call the functions above instead.
3. Banking
Banking tilts only the Banking Target (the visual mesh), never the physics body, so it cannot disturb handling or collisions. The rest pose is the target's relative rotation at Begin Play (or when Set Banking Target is called).
| Property | Default | Description |
|---|---|---|
| Enable Banking | on | Off returns the mesh smoothly to its rest pose. |
| Banking Target | Body Mesh on the pawn | Component that is tilted. |
| Max Bank Roll / Max Bank Pitch | 25° / 8° | Limits. |
| Roll From Turn | 1 | Roll at the full turn rate (fraction of Max Bank Roll). Uses the measured yaw rate, so drifts and collisions bank too. |
| Roll From Strafe | 0.6 | Roll at full strafe input. |
| Pitch From Acceleration | 1 | Nose dips when accelerating and rises when braking (measured forward acceleration relative to Drive Acceleration). |
| Bank Interp Speed | 5 /s | Smoothing. |
pure Get Bank Rotation returns the current visual roll and pitch.
4. Altitude hold & terrain following
In hover mode the hover points keep the craft at Target Hover Height above whatever is below it, so it follows hills, ramps and loops. With Align To Ground the auto-level also tilts the craft to the average ground normal, and the drive pushes along the ground plane.
| Property | Default | Description |
|---|---|---|
| Hover Height | 100 cm | Target height at start. |
| Min Hover Height / Max Hover Height | 40 / 300 cm | Range reachable with the lift input (hover mode) and Set Target Hover Height. |
| Hover Height Change Speed | 150 cm/s | How fast the lift input changes the hover height. |
| Max Slope Angle | 50° | Surfaces steeper than this (measured from world up) are ignored, so walls do not hold the craft up. |
| Ground Probe Distance | 10000 cm | Length of the centre probe used for altitude above ground (telemetry and Above Ground hold). |
| Altitude Hold (flight) | Absolute Altitude | None: vertical speed is only braked. Absolute Altitude: holds the world Z captured when the lift input is released. Above Ground: holds the height above the ground (terrain-following flight). |
| Altitude Hold Strength / Damping | 4 / 3 | PD gains of the hold. |
Nodes: call Set Target Hover Height, pure Get Target Hover Height.
5. Flight mode
EHoverDriveMode: Hover (ground effect) or Flight. In flight the drive cancels gravity, every input axis becomes a 6-DOF command and every axis without input is braked, so a released drone stops and hovers in place, level, at its altitude.
| Property | Default | Description |
|---|---|---|
| Start Mode | Hover | Mode at Begin Play (server). |
| Flight Acceleration | 1500 cm/s² | Forward / strafe acceleration. |
| Flight Lift Acceleration | 1200 cm/s² | Climb / descent acceleration. |
| Flight Max Speed | 2000 cm/s | Top speed before boost. |
| Flight Brake | 2.5 /s | Velocity brake on axes without input (stabilised hovering). |
| Max Pitch Rate / Max Roll Rate | 90 / 120 °/s | Rates at full pitch / roll input. While pitch or roll is held, auto-level is suspended; when released, the craft levels itself. |
| Flight Rotation Response | 6 /s | How fast the rates follow the input. |
| Flight Translate In Local Space | on | On: translation follows the full orientation (6-DOF ship). Off: yaw-only frame, level translation (camera drone). |
| Flight Ground Cushion | on | Hover points still push when closer than the hover height, for soft landings. |
Nodes: call Set Mode, Toggle Flight Mode; pure Get Mode, Is Flying; event On Mode Changed (New Mode).
6. Boost & energy
| Property | Default | Description |
|---|---|---|
| Max Energy | 100 | Energy pool (full at Begin Play). |
| Boost Drain Rate | 30 /s | Energy used per second while boosting. |
| Energy Recharge Rate | 20 /s | Energy regained per second. |
| Recharge Delay | 1 s | Wait after boosting before recharging starts. |
| Min Energy To Boost | 10 | Energy needed to start a boost (a boost continues until the pool is empty). |
| Boost Acceleration Scale / Boost Max Speed Scale | 1.75 / 1.5 | Multipliers on drive / flight acceleration and top speed. |
| Infinite Energy | off | Boost never drains. |
Nodes: call Set Boost Input, Add Energy (server; pickups, pit lanes); pure Get Energy, Get Energy Ratio, Is Boosting; event On Boost Changed (Is Boosting), On Energy Depleted.
7. Drift & air brake
Hover craft have no tyres: Lateral Grip is what stops them sliding sideways. Drifting lowers it and sharpens turning; the air brake multiplies the drag.
| Property | Default | Description |
|---|---|---|
| Lateral Grip | 3 /s | How fast sideways speed is removed (higher = on rails, lower = ice). Reduced in proportion to strafe input. |
| Drift Grip Scale | 0.15 | Grip multiplier while drifting (drift held and grounded in hover mode). |
| Drift Yaw Rate Scale | 1.4 | Turn rate multiplier while drifting. |
| Linear Drag | 0.3 /s | Drag on the velocity in the ground plane (all axes in flight). |
| Air Brake Drag Scale | 6 | Drag multiplier while the air brake is held (both modes). |
Nodes: call Set Drift Input, Set Air Brake Input. Telemetry reports Drifting, Air Braking and the Lateral Speed (slide).
8. Water & surfaces
Two independent ways to hover over liquids and special ground:
Liquid trace channel
Create a trace channel in Project Settings > Collision (for example Liquid, default Ignore), make your water plane Block it and ignore everything else, then enable Trace Liquid Channel and pick it as Liquid Trace Channel. Hover craft now skim across the water while characters and props fall in. The nearer of the ground and liquid hits wins.
| Property | Default | Description |
|---|---|---|
| Trace Liquid Channel | off | Also trace the liquid channel. |
| Liquid Trace Channel | WorldDynamic | Set it to your own channel; it must differ from Trace Channel. |
| Liquid Force Scale | 1 | Hover force multiplier over liquid. |
| Liquid Drag Scale | 1.5 | Drag and grip multiplier over liquid. |
Physical surface rules
Surface Rules is an array of FHoverDriveSurfaceRule: Surface Type, Can Hover (false = the point looks through that surface as if it were air), Force Scale and Drag Scale. With Only Rule Surfaces on, the craft can hover only over surfaces listed with Can Hover (for example only over a Track or Water surface type). Surface types come from the physical material of the hit (Project Settings > Physics > Physical Surface).
9. Auto-level stabilisation
A PID controller on roll and pitch rotates the craft's up axis toward the target up (world up, or the ground normal when grounded with Align To Ground). Yaw is never touched by it. The output is an angular acceleration, independent of the body's inertia.
| Property | Default | Description |
|---|---|---|
| Auto Level | on | Stabilisation on/off. |
| Align To Ground | on | Level to the ground normal when grounded in hover mode. |
| Auto Level Strength (P) | 8 | Correction per radian of tilt. |
| Auto Level Damping (D) | 4 | Damps roll and pitch rotation. |
| Auto Level Integral (I) | 0 | Removes a steady tilt caused by off-centre loads; 0 = PD only. |
| Auto Level Integral Limit | 0.5 | Clamp of the integral term. |
| Airborne Auto Level Scale | 0.5 | Strength multiplier while airborne in hover mode (lets jumps tumble a little). |
10. Influence volumes
Actor AHoverDriveInfluenceVolume — displayed as Hover Drive Influence Volume. A box area (scale or rotate the actor to shape it) that acts on every hover drive whose centre of mass is inside. Several volumes add up. They have no collision and cost one point-in-box test per craft per frame.
| Property | Default | Description |
|---|---|---|
| Enabled | on | Volume on/off. |
| Wind Acceleration | (600, 0, 0) cm/s² | Wind push, mass independent. Set it to zero for a pure lift or gravity zone. |
| Wind In Local Space | on | The wind follows the actor's rotation. |
| Gust Strength / Gust Frequency | 0.35 / 0.6 Hz | Perlin-noise gusts as a fraction of the wind. |
| Lift Acceleration | 0 | Extra upward acceleration: updrafts, jump pads, levitation. |
| Gravity Scale | 1 | 1 = normal, 0.3 = low gravity, 0 = zero-g, 2 = heavy. The hover springs adapt so the hover height stays correct. |
| Drag Scale / Hover Force Scale | 1 / 1 | Drag and hover force multipliers inside. |
| Falloff Distance | 150 cm | Influence fades in over this distance from the box faces (0 = hard edge). |
Volume nodes: pure Get Influence At, Get Weight At; call Set Extent; event On Hover Drive Entered / On Hover Drive Exited. Component nodes: pure Get Active Influence Volumes, Get Current Influence (combined FHoverDriveInfluence); event On Influence Volume Changed (Volume, Entered).
11. Thruster output & events
Every hover point reports its output as Thrust 0-1 (about 0.5 while hovering at rest, rising when compressed or climbing, 0 when out of range). In flight mode the thrusters also show the weight-carrying and climb command, so engines keep glowing in the air. Drive Thrust is the engine output 0-1 (1 = full throttle with boost).
| Node / property | Type | Description |
|---|---|---|
| Get Point Thrust (Index) | pure | Output of one point: drive particle spawn rate, light intensity, audio. |
| Get Point States | pure | Array of FHoverDrivePointState: Grounded, On Liquid, Distance, Compression, Thrust, Location, Impact Point, Impact Normal, Surface Type. Use Impact Point for dust or spray decals. |
| Get Point Location (Index) | pure | World location of a thruster. |
| Get Hover Thrust / Get Drive Thrust | pure | Average hover output and engine output. |
| On Thrust Changed (Hover Thrust, Drive Thrust) | event | Fires when either output changed by Thrust Event Threshold (0.05): set audio pitch / volume here instead of on Tick. |
| On Landing Impact (Impact Speed, Location) | event | Hard touchdown: downward speed ≥ Landing Impact Min Speed (250 cm/s). Location = average impact point. |
12. Grounded & airborne
The craft is grounded while at least Min Grounded Points (1) hover points touch a valid surface. In flight mode a point counts as touching only within 1.2 × the hover height (landed or skimming).
| Node / property | Type | Description |
|---|---|---|
| Air Control | 0.35 | Drive, strafe and turn authority while airborne in hover mode (lateral grip uses it too). |
| Is Grounded, Get Grounded Point Count, Get Air Time, Get Ground Normal | pure | State. |
| On Grounded (Air Time) | event | Touchdown at any speed, with the time spent in the air (jump scoring, landing sounds). |
| On Airborne | event | The craft left the ground. |
13. Telemetry
pure Get Telemetry returns an FHoverDriveTelemetry snapshot for HUDs, audio, AI and analytics:
| Field | Description |
|---|---|
| Speed / Speed Kmh | Speed in cm/s and km/h. |
| Forward Speed / Lateral Speed / Vertical Speed | Along the craft's forward and right axes, and world Z (cm/s). |
| Altitude Above Ground / Altitude | Height of the centre of mass above the ground straight below (-1 = no ground within Ground Probe Distance) and world Z. |
| Target Hover Height | Current target hover height. |
| Grounded Points / Total Points | Hover points on a surface / in use. |
| Energy / Energy Ratio | Boost energy and fraction of Max Energy. |
| Hover Thrust / Drive Thrust | Outputs 0-1. |
| Air Time, Gravity Scale, Active Volumes | Seconds airborne, gravity multiplier and number of influence volumes acting. |
| Mode, Grounded, Boosting, Drifting, Air Braking, Over Liquid | State flags. |
14. Networking
HoverDrive is server-authoritative:
- The owning client writes its input locally and sends it with the unreliable server RPC ServerSetInput whenever it changes (at most Max Input Send Rate, 30 per second) and as a keep-alive every Input Keep Alive Interval (0.2 s). The server clamps every axis. Mode and hover-height changes use reliable RPCs.
- The server simulates the physics, owns the energy, boost and mode, and replicates them (Energy, Boosting, Mode; target hover height and input to the other clients).
- The engine's replicated movement (physics replication of the root body) moves every client's copy; the Hover Drive Pawn enables Replicates and Replicate Movement.
- With Client Side Simulation (on), clients apply the same hover forces to their copy between corrections so motion stays smooth; the owning client uses its own input and the other clients the replicated input. Turn it off for a strictly server-driven body.
Events (Grounded, Landing Impact, Thrust, Mode, Boost, Influence) fire on every machine, so VFX and audio work on all clients. Get Input returns the input in effect on the calling machine.
15. Debugging
Console variable HoverDrive.Debug (development builds; nothing is drawn in shipping builds):
| Value | Draws |
|---|---|
0 | Off (default). |
1 | Hover rays (green = ground, cyan = liquid, red = out of range), impact points, yellow force arrows per point, centre of mass, velocity (blue), ground normal (magenta), wind (orange). |
2 | Everything above plus on-screen telemetry per craft (mode, state, speeds, altitude, points, energy, thrust, gravity, volumes). |
The per-component property Draw Debug shows level 2 for one craft without the console.
Input reference
Component input nodes: Set Throttle Input, Set Strafe Input, Set Yaw Input, Set Lift Input, Set Pitch Input, Set Roll Input (-1..1), Set Boost Input, Set Drift Input, Set Air Brake Input (held), Set Input (whole FHoverDriveInput, for AI or replays), Clear Input, Get Input. Default pawn bindings:
| Mapping | Keyboard | Gamepad |
|---|---|---|
HoverDrive_Throttle | W / S, Up / Down | Right trigger / left trigger |
HoverDrive_Yaw | A / D, Left / Right | Left stick X |
HoverDrive_Strafe | Q / E | Right stick X |
HoverDrive_Lift | Space / Left Ctrl | Right stick Y |
HoverDrive_Pitch | R (nose up) / F | Left stick Y (push = nose down) |
HoverDrive_Roll | Z / C | Left / right shoulder |
HoverDrive_Boost | Left Shift | Face button bottom |
HoverDrive_Drift | Left Alt | Face button right |
HoverDrive_AirBrake | X | Face button left |
HoverDrive_ToggleFlight | T | Face button top |
C++
#include "HoverDriveComponent.h"
#include "HoverDrivePawn.h"
// Drive any pawn that has a Hover Drive component
if (UHoverDriveComponent* Hover = FindComponentByClass<UHoverDriveComponent>())
{
Hover->SetThrottleInput(1.f);
Hover->SetYawInput(-0.4f);
Hover->SetBoostInput(true);
const FHoverDriveTelemetry T = Hover->GetTelemetry();
UE_LOG(LogTemp, Log, TEXT("%.0f km/h, %.0f cm above ground"), T.SpeedKmh, T.AltitudeAboveGround);
}
// In your own physics pawn's constructor (HoverDrive is a UHoverDriveComponent* UPROPERTY)
HoverDrive = CreateDefaultSubobject<UHoverDriveComponent>(TEXT("HoverDrive"));
HoverDrive->HoverPoints.Add(FHoverDrivePoint(FVector( 120.f, 60.f, -30.f)));
HoverDrive->HoverPoints.Add(FHoverDrivePoint(FVector( 120.f, -60.f, -30.f)));
HoverDrive->HoverPoints.Add(FHoverDrivePoint(FVector(-120.f, 0.f, -30.f)));
HoverDrive->BankingTarget = VisualMesh;
// React to landings (BeginPlay); HandleLanding is a UFUNCTION(float ImpactSpeed, FVector Location)
HoverDrive->OnLandingImpact.AddDynamic(this, &AMyCraft::HandleLanding);
Classes: UHoverDriveComponent, AHoverDrivePawn, AHoverDriveInfluenceVolume. Types: FHoverDrivePoint, FHoverDrivePointState, FHoverDriveSurfaceRule, FHoverDriveInput, FHoverDriveInfluence, FHoverDriveTelemetry, EHoverDriveMode, EHoverDriveAltitudeHold.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| The craft just falls | The physics body is not simulating, or the hover traces do not hit: check Simulate Physics, that the floor blocks the Trace Channel (Visibility by default), and that the points are within Max Hover Distance. HoverDrive.Debug 1 shows red rays when nothing is hit. The log warns once when there is no physics target. |
| It bounces | Raise Spring Damping (8-12) or lower Spring Stiffness. |
| It hovers lower than Hover Height | The springs hold the exact height when every point is grounded and carries its share; a point hanging off an edge, strong wind or lift shifts it. Raise Spring Stiffness for a stiffer hold and keep the points at the bottom of the hull (Offset Z). |
| It flips on slopes or walls | Lower Max Slope Angle, raise Auto Level Strength, or turn off Align To Ground. |
| It slides like on ice | Raise Lateral Grip; check a surface rule with a low Drag Scale. |
| Keys do nothing | The pawn must be possessed by a player controller. If your project routes input differently (for example Enhanced Input actions only), turn off Use Default Input Bindings and call the input functions from your own input events. |
| Clients stutter | Keep Client Side Simulation on and make sure the pawn replicates movement (the Hover Drive Pawn does). |
Credits
© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Built for Unreal Engine 4.27 and 5.8.