Runtime Advanced Cables
A physics cable and rope toolkit for Unreal Engine. Verlet simulation, surface draping, player interaction, tethering, riding, swinging, climbing, and towing - all from Blueprint.
Quick Start Guide →
Plugin Type Runtime
Module RAC
Dependencies None (built-in engine modules only)
Engine Version UE 5.4 - 5.7
BP Nodes 246 (200 functions, 46 events)
C++ Required No
RAC ships two cable actors, each built on a different solver. Pick the one that fits your use case - most components (cutting, tether, swing, climb, tow, interaction) work with both.
Feature Support
| Feature / Component | Cable Actor | Wrapping Cable |
| Cable Cutting | Yes | Yes |
| Runtime Pinning | Yes | No (wrap anchors) |
| Extend / Retract | Yes | Yes |
| LOD Tiers | Yes (4-tier) | Yes (4-tier) |
| World Collision | Yes | Yes |
| Cable Interaction (grab) | Yes | Yes |
| Cable Interaction (cut) | Yes | Yes |
| Cable Interaction (pin) | Yes | No |
| Tether Component | Yes | Yes |
| Cable Point | Yes | No |
| Pulley | Yes | No |
| Zipline | Yes | Yes |
| Climbing | Yes | Yes |
| Swing | N/A | N/A |
| Tether Utils | Yes | No |
| Web Utils | Yes | No |
| Geometry Wrapping | No | Yes |
| Wrap Anchors | No | Yes |
| Cable Debug | Yes | Yes |
Components & Features
Installation
- Purchase/download RAC from Fab
- In UE, go to Edit > Plugins, search for RAC, enable it
- Restart the editor
- All components are now available in the Add Component menu and Blueprint palette
Placing Cables
There are several ways to get cables into your level. Pick whichever fits your workflow:
| Method | How | Best For |
| Place Actors | Open the Place Actors panel (or right-click the viewport) and search for Cable Actor, Wrapping Cable, or Zipline Cable. Drag into the viewport, then set AttachStartTo / AttachEndTo in the Details panel to connect endpoints to other actors. | Hand-placed static cables, one at a time |
| Placement Tool | Activate RAC Cable Placement from the Modes dropdown. Click to route cables visually - click-click to chain. | Hand-routing cable runs through a level |
| Cable Points | Add Cable Point Components to actors. Nearby points auto-detect each other and spawn cables on Play. Set one as bIsCableParent to flow defaults to the whole group. | Cable networks, webs, procedural setups |
| Runtime spawn | Call SpawnCableBetween() from the Tether Utils library at runtime in Blueprint or C++. | Gameplay-driven cables (grapple, tow, etc.) |
All methods produce the same Cable Actor or Wrapping Cable - they just differ in when and how the cable is created. You can mix and match freely.
Cable Cutting
Both cable types - Cable Actors and Wrapping Cables can both be cut at runtime.
Cut any cable at any point at runtime. The original cable keeps the head portion, and a new cable of the same type spawns for the tail with its own physics, visuals, and events. Both halves continue simulating independently with free-falling cut ends.
How It Works
- The Verlet solver truncates the original cable's particles to
[0..CutIndex] and sets bFreeEnd = true so the cut end falls naturally
- A new Cable Actor is spawned with the remaining particles
[CutIndex..End], inheriting all visual settings (mesh, material, scale, end caps, flow tiling)
- Existing pins are remapped. Pins on the head stay on the original, pins on the tail transfer to the new cable with corrected indices
OnCableCut fires on both the Verlet component and the Cable actor with references to both halves
Setup
- On your
Cable actor, select the VerletCable child component and set bAllowCutting = true
- Optionally set
MinCutParticles on the Cable actor (default 3). Prevents tiny unusable scraps
- Optionally enable
bAutoDestroyCutPieces to clean up cut-off pieces after AutoDestroyDelay seconds
- Optionally enable
bRegrowAfterCut to have the cable grow back to its original length
Ways to Cut
Sweep Cut (Interaction Component)
Add a
Cable Interaction Component to your character. Call
StartSweepCut() and move the aim or player across cables to slice through them continuously. Cables are cut the moment they enter the sweep radius - perfect for sword slashes, laser beams, or any sweeping motion. Call
StopSweepCut() when done. Fires
OnSweepCableCut for each cable sliced, plus the standard
OnCableCut. Configure
SweepCutRadius and
SweepCutDistance to control the blade size and reach. Works with both Aim and Proximity detection modes.
Single Cut (Interaction Component)
Same
Cable Interaction Component, but for one-at-a-time cuts. Call
CutNearestCable() to find the closest cable, cut it, and fire
OnCableCut with both halves.
Direct (on Cable Actor)
Call
CutCableAtWorldPosition(HitLocation) or
CutCableAtParticle(Index) directly on any
Cable Actor. Returns the new tail cable. Best for line traces, projectile hits, or scripted events.
Low-Level (on Verlet Component)
Call
CutAtParticle(Index) on the
Verlet Cable component directly. Truncates particles in-place without spawning a new actor. Good for beams/lasers or custom cutting logic.
Events
| Source | Event | Parameters |
| Cable Actor | OnCableCut | CutIndex, OriginalCable (head), NewCable (tail) |
| Verlet Cable | OnCableCut | CutIndex |
| Cable Interaction | OnCableCut | OriginalCable, NewCable, CutPoint |
| Cable Interaction | OnSweepCableCut | OriginalCable, NewCable, CutPoint (fires each sweep cut, also fires OnCableCut) |
Auto-Cleanup & Regrow
- Auto-destroy: Enable
bAutoDestroyCutPieces on the Cable Actor to automatically clean up cut-off pieces after AutoDestroyDelay seconds (default 5). Set bOnlyDestroyUnattached = true (default) to keep pieces that are still connected to something.
- Regrow: Enable
bRegrowAfterCut to make the cable grow back to its original length after being cut. The free end extends outward at RegrowSpeed (default 200 u/s) after RegrowDelay seconds (default 1.0). OnCableRegrown fires when complete.
Example Uses
- Sword slash: Bind
StartSweepCut/StopSweepCut to your melee attack. Swing through a room full of cables and slice them all in one motion
- Power lines: Cut cables to disable circuits. Bind
OnCableCut to toggle bCableActive on both halves and trigger downstream logic
- Trap wires: Projectile line trace +
CutCableAtWorldPosition = shoot to sever tripwires
- Grapple ropes: Player cuts their own tether mid-swing for a momentum launch
- Puzzle cables: Cut and reconnect cable networks to reroute energy paths
- Destruction: Combine with physics coupling. Cut a cable holding a physics object and watch it fall
- Regenerating vines: Enable
bRegrowAfterCut for cables that grow back after being severed
Editor Visualizer
When you select a cable actor (Cable Actor or Wrapping Cable) in the viewport, the editor draws an overlay showing cable state. No configuration needed - it activates on selection.
| Visual |
Color |
Meaning |
| Dashed/solid line along cable |
Cyan |
Expected cable path with catenary sag (droop preview based on CableLength vs endpoint distance) |
| Wireframe sphere at endpoint |
Cyan |
Start endpoint (matches runtime debug) |
| Wireframe sphere at endpoint |
Orange |
End endpoint (matches runtime debug) |
| Double wireframe sphere (inner + outer) |
Same as endpoint |
Free endpoint (bFreeStart / bFreeEnd is true - particle simulates freely under gravity) |
| Line from endpoint to actor |
Gold |
Attachment indicator - shows offset from target actor origin (only visible when AttachStartOffset / AttachEndOffset is non-zero) |
| Small spheres along cable |
Blue |
Collision radius preview - shows the CollisionRadius sphere sweep size (only visible when bEnableCollision is true) |
Tip
For runtime debug visualization (LOD heatmaps, tension, interaction zones, stats HUD), use the
Cable Debug Component instead.
Cable Placement Tool
An interactive editor mode for placing cables directly in the viewport. Activate it from the Modes dropdown (or the Modes toolbar) - look for RAC Cable Placement. The mode provides four tools in its toolbar: Route, Delete, Select, and Wrap.
Route Tool
The main placement tool. Left-click in the viewport to set a start point, then left-click again to place a cable between the two points. The tool chains automatically - after placing a cable, the end point becomes the next start point so you can keep clicking to lay out a cable run.
| Input |
Action |
| Left Click |
Place cable endpoint. First click sets start, second click places cable and starts next chain. |
| Right Click |
Stop chaining. Ends the current cable run without placing a new cable. |
| Scroll Wheel |
Adjust slack while placing. Scroll up for more slack (saggier cable), scroll down for less. |
While hovering between clicks, a catenary preview line shows where the cable will hang. The preview updates in real time as you move the mouse and adjust slack.
Snapping
When bSnapToExisting is enabled (default), the cursor snaps to nearby cable endpoints and Cable Point components within the snap radius. This makes it easy to connect cables to existing attachment points or chain off other cables.
Delete Tool
Hover over a cable to highlight it, then left-click to delete it. Works on both Cable Actors and Wrapping Cables.
Select Tool
Two modes of selection depending on where you click:
- Click a Cable Actor - selects that cable and all cables connected to it (follows the chain through shared endpoint actors via BFS). Great for selecting an entire cable run or network for bulk property edits.
- Click a Wrapping Cable - selects that individual cable (wrapping cables are standalone, no chain selection).
- Click empty space - selects every Cable Actor and Wrapping Cable in the level.
Placement Settings
When the Route tool is active, a settings panel appears in the mode's Details panel. These settings apply to all cables placed while they are set.
Appearance
CableMeshStatic MeshMesh for cable segments. Leave empty to use the cable default.
CableMaterialMaterialMaterial for cable segments. Leave empty to use the cable default.
CableMeshScaleVector2DCross-section scale of the cable mesh. Default (0.5, 0.5).
Length
SlackRatiofloatCable length = distance between endpoints * SlackRatio. 1.0 = perfectly taut, 1.2 = 20% slack (default). Scroll wheel adjusts this in real time.
ScrollSlackStepfloatHow much each scroll wheel tick changes the slack ratio. Default 0.05.
Simulation
NumSegmentsint32Simulation segments. 0 = auto-calculate from distance (default).
GravityScalefloatGravity multiplier. 0 = zero-G, 1 = normal (default).
SolverIterationsint32Constraint solver iterations per substep. Higher = stiffer cable. Default 6. (Advanced)
DampingfloatVelocity damping. 0 = none, 1 = full. Lower values mean more swinging. Default 0.1. (Advanced)
SubstepCountint32Substeps per tick. Higher = more stable with fast-moving endpoints. Default 1. (Advanced)
Collision
bEnableCollisionboolEnable per-particle collision so cables drape over geometry. Default true.
CollisionRadiusfloatRadius of each particle's collision sphere (world units). Default 5.
Performance
SleepDistancefloatCamera distance at which the cable sleeps. Default 2500.
bEnableLODTiersboolEnable multi-tier LOD (Full / Medium / Low / Sleeping). Default true.
Snapping
bSnapToExistingboolSnap to existing cable endpoints and Cable Point components when near them. Default true.
SnapRadiusfloatSearch radius for snap detection (world units). Default 100.
Tip
Each cable placed by the tool is a regular
Cable Actor. After placement you can select it and edit any property in the Details panel - the placement settings are just starting defaults.
Tip
For batch cable setups (spider webs, cable networks), use
Cable Point components with auto-connect, or the
Cable Web Utils library function. The placement tool is best for hand-routing individual cables.
Wrapping Cable Placement
The Wrap tool in the Cable Placement mode lets you route Wrapping Cables around geometry by clicking surfaces. Each click adds a wrap anchor point, and the cable is spawned pinned to those points at runtime.
Workflow
Select the Wrap tool from the Cable Placement mode toolbar. Then click surfaces in the viewport to build a cable route.
| Input |
Action |
| First Left Click |
Sets the cable start point. An orange sphere marks the position. |
| Additional Left Clicks |
Adds a wrap anchor at the clicked surface. Yellow spheres mark anchors. You can place as many as you need to route around corners, pillars, and obstacles. |
| Right Click |
Finishes the cable. The cursor position becomes the end point, and the Wrapping Cable is spawned with all anchors pre-seeded. |
| Scroll Wheel |
Adjust slack ratio. Scroll up for more slack (saggier cable), scroll down for less. |
Preview
While routing, committed segments between placed points show in dark blue and the live segment from the last point to the cursor shows in cyan. Each segment displays a catenary curve based on the current slack ratio, so you can see the approximate sag before finishing.
How Anchors Work
Each anchor you place is offset slightly from the surface (by WrapCollisionRadius) and pinned permanently at runtime. These manual anchors are never removed by the auto-unwrap system - the cable stays routed through your clicked points. The runtime wrapping system can still add and remove its own dynamic anchors between your manual ones.
If the cable is attached to an actor at the start point (i.e. you clicked on a movable actor), the cable's start will follow that actor at runtime.
Placement Settings
When the Wrap tool is active, a settings panel appears in the mode's Details panel. These settings apply to the next cable you place.
Appearance
CableMeshStatic MeshMesh for cable segments. Leave empty to use the wrapping cable default.
CableMaterialMaterialMaterial for cable segments. Leave empty to use the wrapping cable default.
CableMeshScaleVector2DCross-section scale of the cable mesh. Default (0.2, 0.2).
Length
SlackRatiofloatCable length = total polyline distance * SlackRatio. 1.0 = perfectly taut, 1.2 = 20% slack (default). Scroll wheel adjusts this in real time.
ScrollSlackStepfloatHow much each scroll wheel tick changes the slack ratio. Default 0.05.
Simulation
NumSegmentsint32Simulation segments. 0 = auto-calculate from total route distance (default).
GravityScalefloatGravity multiplier. 0 = zero-G, 1 = normal (default).
SolverIterationsint32Constraint solver iterations per substep. Higher = stiffer cable. Default 4. (Advanced)
DampingfloatVelocity damping. 0 = none, 1 = full. Default 0.02. (Advanced)
SubstepCountint32Substeps per tick. Higher = more stable with fast-moving endpoints. Default 2. (Advanced)
Wrapping
bEnableWrappingboolEnable runtime auto wrap/unwrap detection around world geometry. Default true.
WrapCollisionRadiusfloatCollision radius for wrap detection traces and anchor surface offset. Default 5.
MaxWrapAnchorsint32Maximum number of runtime wrap anchor points. Manual anchors from the tool do not count toward this limit. Default 8.
Collision
bEnableCollisionboolEnable per-particle collision so cables drape over geometry. Default true.
CollisionRadiusfloatRadius of each particle's collision sphere. Default 5.
Features
bRideableboolMake the cable rideable as a zipline. Default false.
bAllowCuttingboolAllow the cable to be cut at runtime. Default false.
Tip
Each cable placed by the Wrap tool is a regular
Wrapping Cable actor. After placement you can select it and edit any property in the Details panel - add end caps, configure tension material, enable Niagara, etc.
Tip
Place anchors on the
edges of obstacles - corners of pillars, edges of walls - for the most natural-looking wraps. The cable sags between anchors with gravity, so you only need anchors where the cable changes direction.
Segments & Tiling
Every RAC cable has two independent segment counts - one for physics, one for visuals. Understanding the difference is key to getting cables that look great without wasting performance.
Simulation Segments (CPU)
NumSegments controls how many particles the Verlet solver simulates. More particles means smoother curves and more accurate physics, but each particle adds CPU cost every frame. A heavy rope bridge might need 40-60 segments for realistic sag, while a short electrical wire can get away with 4-6.
Visual Segments (GPU)
MaxVisualSegments controls how many spline mesh pieces are used to render the cable. This is completely independent of the simulation - you can simulate 50 particles but only render 12 mesh segments. The visual system interpolates between particles to produce a smooth curve regardless.
Each LOD tier can further reduce the visual count:
- Full LOD: Uses
MaxVisualSegments (default 64, or NumSegments if set to 0)
- Medium LOD: Auto halves the Full count (or set
LODMediumVisualSegments manually)
- Low LOD: Auto quarters the Full count, minimum 4 (or set
LODLowVisualSegments manually)
Flow Tiling (UV)
FlowTiling controls how many times the material texture repeats along the cable length. At 1.0 (default), the texture stretches once across the whole cable. At 4.0, it tiles four times. This works because RAC creates a separate Dynamic Material Instance for each visual segment and sets continuous UVOffset / UVScale values so the texture flows seamlessly across all segments.
Tip
The tiling property is named differently per class:
FlowTiling on Cable Actor and Wrapping Cable,
VisualFlowTiling on Verlet Cable Component, and
LinkFlowTiling on Tether Component. They all do the same thing.
Practical Guidelines
| Scenario |
NumSegments |
MaxVisualSegments |
Why |
| Short wire / cord |
4-8 |
0 (match sim) |
Few particles are enough. No need to cap visuals. |
| Background ambient cable |
10-20 |
8-12 |
Player won't examine closely. Save GPU with fewer meshes. |
| Hero rope / bridge |
30-60 |
20-30 |
Smooth physics matters. Visuals can be slightly lower since interpolation fills the gaps. |
| Hundreds of cables (web) |
6-10 |
4-6 |
Scale demands low counts everywhere. Use Cable Point defaults to set once. |
Tip
When using
Cable Point components, segment counts are auto-calculated from distance (sqrt scaling). You only need to tune manually for gameplay-critical cables or when optimizing large cable webs.
Flow Materials
RAC automatically creates Dynamic Material Instances per segment with continuous UV flow. To use this in your materials:
- Add two
ScalarParameter nodes named UVOffset (default 0) and UVScale (default 1)
- Apply them to your V coordinate:
adjustedV = meshV * UVScale + UVOffset
- Use
FlowTiling / VisualFlowTiling / LinkFlowTiling to control how many times the texture repeats along the cable
Tip
Flow is optional. RAC works with any material.
Wind & Drift
Two systems give cables organic ambient motion without any Blueprint logic. Both are per-cable settings on the Verlet Cable Component (or inherited via Cable Point defaults). Wrapping Cables have their own matching Drift and Wind properties with the same behavior.
World Wind
Drop a Wind Directional Source actor into the level and enable bUseWorldWind on any cable. The cable samples the scene wind each frame and pushes particles accordingly. Per-particle Perlin noise (WindTurbulence) adds flutter so the cable ripples instead of just leaning.
Simulation | Wind
bUseWorldWindboolSample Wind Directional Source actors and apply to cable particles. Sampled once per cable per frame at the cable midpoint. Default false.
WorldWindScalefloatMultiplier on the wind force. 1 = full strength. Default 1.0.
WindTurbulencefloatPer-particle noise modulation. 0 = uniform push (cable just leans), 1 = full turbulence (cable ripples and flutters). Default 0.5, range 0-1.
WindTurbulenceFrequencyfloatHow fast the turbulence pattern changes. Lower = slow rolling gusts, higher = rapid fluttering. Default 1.5.
Ambient Drift
Small Perlin-based forces that give cables gentle ambient movement - perfect for underwater, sci-fi, or organic environments. No Wind Source needed; drift is self-contained per cable.
Simulation | Drift
DriftStrengthfloatForce strength of ambient drift. 0 = disabled. Start with 1-5 for subtle movement. Default 0.
DriftFrequencyfloatHow fast drift direction changes (Hz). Lower = slow, gentle undulation. Higher = rapid direction changes. Default 0.3.
DriftSmoothnessfloatHow smooth drift waves are along the cable. Higher = long, smooth waves where neighbors move together. Lower = each particle drifts independently. Default 8.0, range 1-50. Advanced
bLockDriftXboolDisable drift on the X axis. Default false.
bLockDriftYboolDisable drift on the Y axis. Default false.
bLockDriftZboolDisable drift on the Z axis. Default false.
Tip
Wind and drift stack naturally. Use drift for constant ambient motion and wind for directional, weather-driven movement. For Cable Point networks, set
CableDriftStrength and
CableDriftFrequency in the Cable Parent defaults to apply drift to all cables at once.
Cable Actor RAC Cable
The cable actor. Verlet physics with spline mesh visuals, overlap capsules, end caps, pin indicator meshes, and gameplay active/inactive state.
Cable
SceneRootScene ComponentRoot scene component. Read-Only
VerletCableVerlet Cable ComponentThe Verlet physics simulation component. Edit cable parameters (length, segments, gravity, collision, etc.) directly on this. Read-Only in Blueprint.
Interaction
bCableActiveboolGameplay flag. Does not affect simulation or visuals. Your BP decides consequences. Default true.
bClimbableboolWhether this cable can be climbed via Climb Component. Default false.
bAllowTetheringboolAllow this cable to be tethered by the Cable Interaction Component's bAutoTetherOnDetect feature. When false, auto-tether detection skips this cable. Manual TetherToCable() still works. Default false.
bAllowGrabbingboolWhether players can grab this cable via CableInteractionComponent. Forwarded to VerletCable at BeginPlay. Default true.
bAllowPinningboolWhether this cable can be pinned at runtime. When false, all pin functions are no-ops. Forwarded to VerletCable at BeginPlay. Default false.
bAllowUnpinningboolWhether pins can be removed at runtime. Forwarded to VerletCable at BeginPlay. Default true.
PinLockDelayfloatSeconds after BeginPlay before pinning auto-locks. 0 = never auto-lock. Lets editor-placed systems pin on init, then lock out new pins. Default 0.
Performance | Overlap
OverlapCapsuleRadiusfloatOverlap detection zone radius for capsules. Default 500.
NumOverlapCapsulesIntegerNumber of overlap capsules along the cable. Default 4, range 1-20. Advanced
Appearance
CableMeshStatic MeshMesh per segment. Default SM_RAC_HollowCylinder (included with plugin).
CableMaterialMaterialMaterial for all cable segments (slot 0). Default MI_RAC_CableType01. Supports UVOffset/UVScale scalar params for flow tiling.
AdditionalCableMaterialsMaterial ArrayMaterials for additional mesh slots (slot 1, 2, ...) when CableMesh has multiple material sections. Empty = no extra slots.
CableMeshScaleVector 2DCross-section scale. Default (0.2, 0.2).
FlowTilingfloatUV flow tiling. Default 1.0.
DistanceScaleFactorfloatDistance-based thickness. 0 = off. Default 0.
MinDistanceScalefloatMinimum thickness multiplier. Default 1.0.
MaxDistanceScalefloatMaximum thickness multiplier. Default 5.0.
DistanceScaleReferencefloatDistance at which scale = 1x. 0 = auto (2% of cable length, min 500). Default 0. Advanced
bCastShadowboolCast shadow from cable meshes. Default false.
bReceiveDecalsboolWhether cable segments, end caps, and pin meshes receive decals. Default true.
bDriveMaterialTensionboolAuto-feed the cable's tension ratio (0-1) into a scalar material parameter each tick. Material needs a matching ScalarParameter. Default false.
TensionMaterialParameterNameNameName of the scalar parameter receiving the tension ratio. Default "Tension".
TensionRemapMinfloatTension ratio that maps to 0 in the material. Set to resting tension (e.g. 0.65 for a droopy cable). Default 0.
TensionRemapMaxfloatTension ratio that maps to 1 in the material. Default 1.0.
TensionCurvefloatResponse curve exponent applied after remap. <1 = kicks in sooner (more sensitive), >1 = ramps up later (more gradual). Default 1.0, range 0.1-5.0.
End Caps
EndCapMeshStatic MeshMesh at cable endpoints.
EndCapMaterialMaterialMaterial for end caps.
EndCapScaleVectorEnd cap scale. Default (1,1,1).
EndCapRotationOffsetRotatorRotation offset for end cap meshes.
SealCapMeshStatic MeshMesh to seal hollow cable ends at free or cut endpoints. Default SM_RAC_HollowCylinder_CAPPED (included with plugin). Set to None to disable.
SealCapMaterialMaterialMaterial for seal cap meshes. Default MI_RAC_CableType06.
SealCapInsetfloatHow far seal caps push into the cable (along cable direction). Makes them inline seals rather than flush end caps. Default 5.
Pin Visuals
PinMeshStatic MeshMesh placed at pin positions. Auto-created/destroyed.
PinMaterialMaterialMaterial for pin meshes.
PinMeshScaleVectorPin mesh scale. Default (1,1,1).
bPinMeshCollisionboolEnable collision on pin meshes so they block traces and overlap. Default true.
PinMeshCollisionProfileFCollisionProfileNameCollision profile for pin meshes. Only used when bPinMeshCollision is true.
Performance
MaxVisualSegmentsIntegerMaximum spline mesh segments at Full LOD. 0 = use all simulation particles. Default 64.
VisualUpdateIntervalfloatVisual and overlap capsule update interval. 0 = every frame. 0.033 = ~30fps. Default 0. Advanced
LODMediumVisualSegmentsIntegerVisual segments at Medium. 0 = auto (half). Default 0. Advanced
LODLowVisualSegmentsIntegerVisual segments at Low. 0 = auto (quarter of Full, min 4). Default 0. Advanced
Performance (Forwarded to VerletCable)
SleepDistancefloatCamera distance at which the cable pauses simulation. 0 = never sleep. Default 0.
bEnableLODTiersboolEnable graduated LOD. Default false.
LODMediumDistancefloatMedium tier distance. Default 0.
LODLowDistancefloatLow tier distance. Default 0.
bHideVisualsAtLowboolHide cable visuals at Low LOD to save GPU draw calls. Default true.
bHideVisualsAtSleepboolHide cable visuals at Sleeping LOD to save GPU draw calls. Default true.
bDisableShadowsAtLowLODboolDisable shadow casting at Low/Sleeping LOD to save shadow map draw calls. Shadows restore at Medium/Full. Default true.
bSleepAttachedBodiesboolPut attached physics bodies to sleep when the cable sleeps, wake them when it wakes. Off by default - enabling can break gameplay objects (e.g. towed vehicles) that need to keep simulating. Default false. Advanced
SleepSolverIterationsIntegerSolver iterations when sleeping. 0 = fully frozen (cheapest). Default 0. Advanced
SettleTimefloatSeconds before sleep is allowed (lets cable settle into drape shape). Default 0. Advanced
Functions
Forwards to VerletCable component.
Convenience wrapper for VerletCable's closest point query.
Attach the cable START to an actor, optionally at a socket with an offset.
Set the cable START to a fixed world position.
Release the cable START to simulate freely.
Attach the cable END to an actor, optionally at a socket with an offset.
Set the cable END to a fixed world position.
Release the cable END to simulate freely.
Note
Access the full solver API through the
VerletCable property (BlueprintReadOnly).
Extend / Retract Functions
Begin extending the cable at ExtendRate. Forwards to VerletCable.
Stop extending. Forwards to VerletCable.
Begin retracting the cable at RetractRate. Forwards to VerletCable.
Stop retracting. Forwards to VerletCable.
One-shot length change. Positive = extend, negative = retract. Forwards to VerletCable.
Whether the cable is currently extending. Pure.
Whether the cable is currently retracting. Pure.
Active State Functions
Set active state. Only broadcasts events when state actually changes.
Query current active state.
Active State Events
Fires when cable becomes active.
Fires when cable becomes inactive.
Cutting
Cutting Settings
bAllowCuttingboolWhether this cable can be cut at runtime via CutCableAtParticle / CutCableAtWorldPosition. Default false.
CutImpulseStrengthfloatRandom velocity applied at the cut point for a natural snap effect. Default 10. Advanced
MinCutParticlesIntegerMinimum particles each piece must have after a cut. Prevents tiny scraps. Default 3. Advanced
CutOffMaterialMaterialMaterial applied to the cut-off tail cable (slot 0). Default MI_RAC_CableType02. Set to None to keep the same CableMaterial. Advanced
CutOffAdditionalMaterialsMaterial ArrayAdditional materials for the cut-off tail cable (slot 1, 2, ...). Empty = keep existing AdditionalCableMaterials. Advanced
PostCutMaterialMaterialMaterial the remaining head cable switches to after being cut (slot 0). Default MI_RAC_CableType02. Set to None to keep existing CableMaterial. Advanced
PostCutAdditionalMaterialsMaterial ArrayAdditional materials the remaining head cable switches to after being cut (slot 1, 2, ...). Empty = keep existing AdditionalCableMaterials. Advanced
bAutoDestroyCutPiecesboolAutomatically destroy cut-off cable pieces after a delay. Prevents rope clutter. Default false.
AutoDestroyDelayfloatSeconds before a cut-off piece is destroyed. Default 5.0.
bOnlyDestroyUnattachedboolOnly auto-destroy cut pieces where neither end is attached to another actor. Default true.
bRegrowAfterCutboolRegrow the cable back to its original length after being cut. The free end extends outward over time. Default false.
RegrowSpeedfloatHow fast the cable regrows (units/sec). Default 200.
RegrowDelayfloatSeconds to wait before regrowing starts. Default 1.0.
bRegrowToInitialLengthboolAlways regrow to the cable's initial length (at BeginPlay), even if cut multiple times. Default true.
bRegrowTowardAttachmentboolWhen regrowing, drive the free end toward the original attachment point and reattach on arrival. Looks like a tendril reaching back to reconnect. Only applies when the cable had an end attachment before the cut. Default false.
bPersistRegrowAttachmentboolKeep the stored attachment target when re-cut during regrow. The cable remembers where it was heading and keeps seeking. When false, re-cutting while reconnecting forgets the target. Default false. Advanced
bRestoreMaterialOnRegrowboolRestore the original cable material when regrow completes. Only relevant when PostCutMaterial is set. Default true.
Split the cable. Original keeps particles [0..Index], a new cable actor is spawned for the tail. Returns the new cable.
Convenience wrapper. Finds the nearest particle to the world position and calls CutCableAtParticle.
Fires when this cable is cut. OriginalCable = head piece, NewCable = spawned tail piece.
Whether the cable is currently regrowing after being cut.
Fires when the cable finishes regrowing to its original length after a cut.
Wrapping Cable RAC Wrapping Cable
A standalone cable actor that dynamically wraps around world geometry under tension.
Uses section-based simulation: wrap anchors pin the cable to surfaces, with independent
verlet chains between them for natural sag. Tight sections stay straight, slack sections
drape with gravity.
Not a component
Wrapping Cable is a standalone actor, not a component.
It does
not use the Verlet Cable Component internally - it has its own
section-based solver. Place it in the level like any other actor.
Shared Features
Both cable types support cutting, tethering, sliding, zipline riding, extend/retract, Niagara integration, drift, wind, tension materials, and climbing. Wrapping Cables additionally wrap around geometry. Cable Actors additionally support beam effects, runtime pinning, Cable Points, Pulley, and Cable Web. See the
feature support table for details.
Properties
Simulation
NumSegmentsIntegerNumber of simulation segments (particles = segments + 1). Higher = smoother sag. Default 20.
CableLengthfloatTotal rope length in world units. Default 200.
DampingfloatVelocity damping. 0 = none, 1 = full stop each frame. Default 0.02.
GravityScalefloatGravity multiplier. 0 = no gravity. Default 1.0.
SolverIterationsIntegerConstraint solver iterations per substep. Higher = stiffer cable. Default 4.
SubstepCountIntegerPhysics substeps per tick. Higher = more stable at speed. Default 2.
bPreventStretchingboolInextensible (Rigid Length) - Segments can go slack but cannot stretch beyond rest length. Like a chain: folds but never elongates. Does NOT push attached actors. Default false.
Drift
DriftStrengthfloatPerlin noise displacement amplitude. 0 = no drift. Gives cables organic sway. Default 0.
DriftFrequencyfloatTemporal frequency of the drift noise. Higher = faster sway. Default 1.0.
DriftSmoothnessfloatSpatial smoothness. Higher = adjacent particles drift together. Default 5.0.
bLockDriftXboolDisable drift on the X axis. Default false.
bLockDriftYboolDisable drift on the Y axis. Default false.
bLockDriftZboolDisable drift on the Z axis. Default false.
Wind
bUseWorldWindboolSample WindDirectionalSource actors and apply their force to the cable. Default false.
WorldWindScalefloatScale factor applied to sampled wind force. Default 1.0.
WindTurbulencefloatRandom noise modulation on top of wind. 0 = steady wind. Default 0.3.
WindTurbulenceFrequencyfloatFrequency of wind turbulence noise. Default 1.0.
Attract Point
AttractPointVectorWorld-space point to pull all particles toward. Default (0,0,0).
AttractStrengthfloatForce strength pulling particles toward AttractPoint. 0 = off. Default 0.
Wrapping
bEnableWrappingboolEnable automatic wrap/unwrap detection. When off, cable sags freely. Default true.
WrapCollisionRadiusfloatCollision radius for wrap detection traces. Also offsets wrap anchors from surfaces. Default 5.0.
WrapCollisionChannelCollision ChannelCollision channel for wrap detection traces. Default Visibility.
MaxWrapAnchorsIntegerMaximum number of wrap anchors. Prevents runaway wrapping on complex geometry. Default 8.
MinWrapAnchorSpacingfloatMinimum distance between a new wrap anchor and existing endpoints/anchors. Lower = more precise wrapping around tight corners. Default 15.0.
MinWrapSectionLengthfloatMinimum section length to consider for wrap detection. Sections shorter than this are skipped. Default 20.0. Advanced
bFreezeAtMaxAnchorsboolHard Freeze at Max Anchors - Hard-lock grab point and endpoints when MaxWrapAnchors reached. Extending blocked. Mutually exclusive with Soft Limit at Max Anchors. Default true.
bPullBackAtMaxAnchorsboolSoft Limit at Max Anchors - Apply spring forces instead of freezing when MaxWrapAnchors reached. Softer, allows movement within limits. Mutually exclusive with Hard Freeze at Max Anchors. Default false.
bWrapOnTopSurfacesboolAllow the cable to create wrap anchors on upward-facing (floor-like) surfaces. When false, surfaces with normals pointing mostly upward (> ~45 deg) are skipped and the cable drapes over them via particle collision instead. Enable this to wrap on top of meshes like tables, ledges, and props. Default true.
WrapStickinessfloatHow reluctant wrap anchors are to release when the cable straightens. 0 = loose (anchors release as soon as the cable opens past ~90 deg), 0.5 = default (anchors release when line-of-sight clears), 1 = sticky (anchors hold until cable is nearly straight ~150 deg). Lower for free-flowing ropes, higher for vines or cables that cling. Range 0-1.
bIgnoreOtherCablesboolAutomatically ignore all other Wrapping Cable actors (and their attachment targets) in wrap detection traces. Prevents cables from wrapping around each other's endpoint actors. Default true.
WrapIgnoreActorsActor ArrayAdditional actors to ignore during wrap detection and particle collision traces.
InitialWrapAnchorsInitial Wrap Anchor ArrayPre-placed wrap anchor points from the editor route tool. Cable initializes already routed through these points. Cleared after initialization. Each entry has Position (FVector), SurfaceNormal (FVector), and WrappedActor (Actor). Advanced
Collision
bEnableCollisionboolEnable per-particle sphere traces so the cable drapes over world geometry. Default true.
CollisionRadiusfloatRadius of each particle's collision sphere. Default 5.0.
CollisionChannelCollision ChannelTrace channel for particle world collision. Default WorldStatic.
MaxCollisionTracesPerFrameIntegerMax collision traces per frame. 0 = trace all particles. Lower values spread traces across frames (round-robin). Resting particles reuse cached normals on skipped frames. Default 0. Advanced
CollisionFrictionfloatSurface friction when sliding on geometry. 0 = frictionless, 1 = full stop. Default 0.3. Advanced
Attachments
AttachStartToActor ReferenceActor to attach cable start to. Null = this actor's location.
AttachStartOffsetVectorOffset from start actor's origin (world-space addition). Default (0,0,0).
AttachEndToActor ReferenceActor to attach cable end to. Null = this actor's location + AttachEndOffset.
AttachEndOffsetVectorOffset from end actor's origin (world-space addition). Default (200, 0, 0).
AttachStartSocketNameSocket or bone name on the start actor's mesh. None = use actor origin + offset.
AttachEndSocketNameSocket or bone name on the end actor's mesh. None = use actor origin + offset.
bFreeStartboolWhen true, the cable start simulates freely instead of being pinned to AttachStartTo. Used by the cutting system for cut endpoints. Default false.
bFreeEndboolWhen true, the cable end simulates freely instead of being pinned to AttachEndTo. Used by the cutting system for cut endpoints. Default false.
Performance | Overlap
OverlapCapsuleRadiusfloatRadius of overlap capsules placed along the cable for overlap detection. Default 500.
NumOverlapCapsulesIntegerNumber of capsule components placed along the cable for overlap detection. Default 4. Advanced
Appearance
CableMeshStatic MeshMesh for cable spline segments. Must be set for cable to render.
CableMaterialMaterialMaterial for cable segments (slot 0). Null = mesh default.
AdditionalCableMaterialsMaterial ArrayMaterials for additional mesh slots (slot 1, 2, ...) when CableMesh has multiple material sections. Empty = no extra slots.
CableMeshScaleVector 2DCross-section scale (cable thickness). Default (0.2, 0.2).
FlowTilingfloatHow many times the flow texture tiles along the cable. 1 = one full pass. Default 1.0.
bCastShadowboolWhether cable segments cast shadows. Default false.
bReceiveDecalsboolWhether cable segments receive decals. Default true.
bDriveMaterialTensionboolAutomatically feed the cable's tension ratio (0-1) into a scalar material parameter each tick. Default false.
TensionMaterialParameterNameNameName of the scalar parameter on the cable material that receives the tension ratio. Default "Tension".
TensionRemapMinfloatTension ratio that maps to 0 in the material. Default 0.0.
TensionRemapMaxfloatTension ratio that maps to 1 in the material. Default 1.0.
TensionCurvefloatResponse curve exponent applied after remap. <1 = kicks in sooner (more sensitive to slack), >1 = ramps up later (more gradual). Default 1.0, range 0.1-5.0.
DistanceScaleFactorfloatScale cable thickness based on camera distance to prevent sub-pixel disappearance. 0 = disabled. Default 0.0.
MinDistanceScalefloatMinimum thickness multiplier (floor for distance scaling). Default 1.0.
MaxDistanceScalefloatMaximum thickness multiplier (ceiling for distance scaling). Default 5.0.
DistanceScaleReferencefloatReference distance at which CableMeshScale is used unmodified. 0 = auto. Default 0.0. Advanced
End Caps
EndCapMeshStatic MeshMesh for cable endpoints (connector/plug). Null = no end caps.
EndCapMaterialMaterialMaterial for end cap meshes.
EndCapScaleVectorScale of the end cap meshes. Default (1, 1, 1).
EndCapRotationOffsetRotatorRotation offset on top of auto-orientation. Default (0, 0, 0).
SealCapMeshStatic MeshMesh to seal hollow cable ends at free/cut endpoints. Only appears when bFreeStart/bFreeEnd is true and no EndCapMesh is set.
SealCapMaterialMaterialMaterial for seal caps.
SealCapInsetfloatHow far seal caps are pushed into the cable along its direction. Default 5.0.
Anchor Visuals
AnchorMeshStatic MeshMesh placed at each wrap anchor point. Null = no anchor visuals.
AnchorMaterialMaterialMaterial for anchor meshes. Null = mesh default.
AnchorMeshScaleVectorScale of anchor meshes. Default (1, 1, 1).
Active State
bCableActiveboolWhether this cable is "active" (powered, energized, etc). Purely a gameplay flag. Category "Simulation". Default true.
Extend/Retract
ExtendRatefloatSpeed at which the cable extends (units/sec). Default 0.
RetractRatefloatSpeed at which the cable retracts (units/sec). Default 0.
MaxCableLengthfloatMaximum cable length. 0 = unlimited. Default 0.
MinCableLengthfloatMinimum cable length. 0 = unlimited. Default 0.
Pull Back
bPullBackWhenTautboolApply spring forces to the player and/or endpoint actors when the cable is pulled taut. Prevents stretching beyond cable length. Default false.
PullBackStiffnessfloatSpring stiffness when the player exceeds cable reach. ~5 = soft, ~15 = firm, ~30+ = hard wall. Mass-compensated. Default 15.0.
PullBackDampingfloatDamping along the pull direction. 0 = bouncy, ~5 = smooth. Mass-compensated. Default 8.0.
bPullBackOnGrabboolApply pull-back to the player when they grab the cable body (via interaction component). Disable to let the player drag the cable freely while still constraining endpoints. Default true.
bPullBackEndpointsboolApply pull-back to actors attached at the cable endpoints (AttachStartTo / AttachEndTo). Disable to let endpoints stretch freely while still constraining grabbed interaction. Default true.
PullBackTolerancefloatFraction of section rope length the cable must stretch beyond taut before pull-back engages. 0.05 = 5% stretch needed. Range 0-0.25. Default 0.05.
Cutting
bAllowCuttingboolAllow this cable to be cut at runtime. Default false.
CutImpulseStrengthfloatRandom velocity injected at the cut point for natural whip/flutter. Default 50.
MinCutParticlesIntegerMinimum particles in each piece after cutting. Prevents degenerate tiny cables. Default 3.
CutOffMaterialMaterialMaterial applied to the cut-off tail cable (slot 0). Null = keep existing.
CutOffAdditionalMaterialsMaterial ArrayAdditional materials for cut-off tail cable. Empty = keep existing.
PostCutMaterialMaterialMaterial the remaining head cable switches to after being cut. Null = keep existing.
PostCutAdditionalMaterialsMaterial ArrayAdditional materials for remaining head cable. Empty = keep existing.
bAutoDestroyCutPiecesboolAutomatically destroy cut-off pieces after a delay. Default false.
AutoDestroyDelayfloatSeconds before a cut-off piece is destroyed. Default 5.0.
bOnlyDestroyUnattachedboolOnly auto-destroy pieces with both ends free. Pieces still attached to an actor survive. Default true.
Rideable
bRideableboolAllow characters to ride this cable like a zipline. Default false.
RideSpeedfloatBase ride speed along the cable (cm/s). Default 600.
RideHangDistancefloatDistance the character hangs below the cable (cm). In pendulum mode this is the rope length. Default 100.
RideStiffnessfloatSpring stiffness pulling the character toward the hang point. Ignored when bPendulumRide is true. Default 10.
RideGravityScalefloatGravity multiplier while riding. Ignored when bPendulumRide is true (full gravity used instead). Default 1.0.
bPendulumRideboolPendulum swing mode instead of spring-follow. When true, rider swings freely below the cable. Default true.
PendulumRideAirDragfloatAir drag coefficient in pendulum mode. Higher = more damping. Default 0.5.
bRideAutoDirectionboolAutomatically detect ride direction from cable slope. Default true.
bRideGravityInfluenceboolDownhill speeds up, uphill slows down. Default true.
bRideSlowAtEndsboolSlow down when approaching cable endpoints. Default true.
RideSlideSpeedfloatManual slide input speed (cm/s). Default 300.
Niagara
bFeedNiagaraboolFeed cable particle positions to a Niagara system via the RAC Cable NDI. Default false.
NiagaraSystemNiagara SystemNiagara system asset to auto-spawn and feed.
NiagaraComponentTagNameTag to find an existing NiagaraComponent instead of auto-creating.
NiagaraPositionArrayNameNameName of the RAC Cable DI user parameter. Default "CablePositions".
NiagaraNumPointsNameNameName of the Integer user parameter for point count. Default "NumCablePoints".
Interaction
bAllowTetheringboolWhether Tether Component can tether to this cable. Manual TetherToWrappingCable() still works when false. Default false.
bClimbableboolWhether this cable can be climbed via Climb Component. Default false.
bGrabbableboolWhether this cable can be grabbed. Default true.
bClampGrabToLengthboolClamp Grab to Cable Length - Clamp the grab anchor position so the cable path never exceeds CableLength. Only affects the grab point on the cable, NOT the player. For player push-back, use Pull Back When Taut. Default true.
bIsGrabbedboolWhether the cable is currently grabbed. Read-Only
Performance
SleepDistancefloatCamera distance at which the cable pauses simulation. 0 = never sleep. Default 0.
SettleTimefloatSeconds before sleep is allowed (lets cable settle into drape shape first). Default 0. Advanced
VisualUpdateIntervalfloatVisual update interval. 0 = every frame. 0.033 = ~30fps. Default 0. Advanced
bEnableLODTiersboolEnable multi-tier LOD based on camera distance. Default false.
LODMediumDistancefloatCamera distance threshold for Medium LOD tier. 0 = auto (33% of SleepDistance). Default 0.
LODLowDistancefloatCamera distance threshold for Low LOD tier. 0 = auto (66% of SleepDistance). Default 0.
SleepSolverIterationsIntegerSolver iterations override when sleeping. 0 = skip simulation entirely. Default 0. Advanced
LODMediumVisualSegmentsIntegerVisual segments for Medium LOD tier. 0 = auto (half of full). Default 0. Advanced
LODLowVisualSegmentsIntegerVisual segments for Low LOD tier. 0 = auto (quarter of full). Default 0. Advanced
bHideVisualsAtLowboolHide cable visuals at Low LOD to save GPU draw calls. Default false.
bHideVisualsAtSleepboolHide cable visuals at Sleeping LOD to save GPU draw calls. Default true.
bDisableShadowsAtLowLODboolDisable shadow casting at Low/Sleeping LOD to save shadow map draw calls. Shadows restore at Medium/Full. Default true.
Functions
Number of active wrap anchors. Pure.
World positions of all wrap anchors, start-to-end order. Pure.
Remove all wrap anchors, collapse to a single free-hanging section.
All particle positions across all sections (flat array, start-to-end). Pure.
Total flattened particle count across all sections. Pure.
World-space position of the particle at a flat index (across all sections). Clamped to valid range. Pure.
Reinitialize cable: straight line from start to end, all wraps cleared.
Tension ratio: taut path length / cable length. 0 = fully slack, 1 = fully taut. Pure.
Grab the cable at a world position. Creates a temporary anchor that follows the grab target. Optionally pass the grabbing actor for pull-back support (must be a Character). Returns true if grab succeeded.
Move the grab point to a new target position. Call each frame while grabbed.
Release the grab, removing the temporary anchor.
Find the closest point on the cable to a world position. Returns true if found. Use for detection/targeting before grabbing. Pure.
Start extending the cable (continuous).
Stop extending the cable.
Start retracting the cable (continuous).
Stop retracting the cable.
One-shot cable length change. Positive = longer, negative = shorter.
Whether the cable is currently extending. Pure.
Whether the cable is currently retracting. Pure.
Cut this cable at a flat particle index (across all sections). Spawns a new wrapping cable from the tail. Returns the new tail cable, or null on failure.
Cut at the nearest particle to a world position. Returns the new tail cable, or null.
Start a character riding this cable. Returns true on success. Requires bRideable = true.
Add manual slide input (-1 to 1) for rider speed control.
Set the cable active state. Fires OnCableActivated/OnCableDeactivated when the state changes.
Flip the cable active state.
Whether the cable is currently active. Pure.
Events
Fired when a new wrap anchor is created.
Fired when a wrap anchor is removed.
Fired when the cable is grabbed.
Fired when the cable is released.
Fires when the cable becomes active.
Fires when the cable becomes inactive.
Fires once when the cable reaches MaxWrapAnchors. Does not fire again until anchors drop below the limit.
Fires each tick the cable is extending. Provides the new cable length.
Fires each tick the cable is retracting. Provides the new cable length.
Fires once when the cable reaches MaxCableLength.
Fires once when the cable reaches MinCableLength.
Fires when the cable is cut. Provides the cut index and references to both the original (head) and new (tail) cables.
Fires when a character starts riding this cable.
Fires when a character stops riding this cable.
Rideable Cable / Zipline RAC Zipline Cable
Works with both - Cable Actors and Wrapping Cables both support zipline riding.
Ride along cables using Zipline Cable - a Cable Actor subclass with ride physics built in. Place it in your level, call StartRiding(Character), and the player rides along the cable polyline. Auto-direction, gravity-influenced speed, deceleration at ends, pendulum swing mode. Tick disabled until ride starts.
Tip
Place a
Zipline Cable in your level for a drop-in zipline. All ride settings are on the Rideable category in the Details panel.
First-Person Camera Clipping
If the ride tether rope clips into your camera, configure these on the rider's
Tether Component (not the cable):
PlayerAttachSocket - attach the rope to a hand bone instead of the actor origin.
PlayerAttachOffset - offset the rope origin away from the camera (e.g. down and forward).
PlayerNozzleParticles (Tether | Nozzle, Advanced) - add 2-4 rigid segments at the player end to keep the rope stiff and predictable near the body.
PlayerBodyRadius (Tether | Nozzle, Advanced) - invisible sphere that pushes rope particles away from the player.
Rideable (Cable Actor)
bRideableboolWhether this cable is rideable. Set to true by default on Zipline Cable. Default false.
RideSpeedfloatBase travel speed along cable in cm/s. Default 800.
RideHangDistancefloatHow far below the cable the rider hangs (cm). In pendulum mode this is the rope length. Default 350.
RideStiffnessfloatSpring stiffness pulling rider toward hang point. Ignored when bPendulumRide is true. Default 15.
RideGravityScalefloatRider's gravity during ride. 0 = weightless, 1 = full gravity. Ignored when bPendulumRide is true (full gravity used instead). Default 0.3.
bPendulumRideboolFree pendulum swing vs critically-damped spring. When true, rider swings freely below the cable. Default false.
PendulumRideAirDragfloatAir drag coefficient in pendulum mode. Higher = more damping. Default 0.02.
bRideAutoDirectionboolRide toward whichever cable end is farther from player. Default true.
bRideGravityInfluenceboolDownhill speeds up, uphill slows down. Default true.
bRideSlowAtEndsboolDecelerate near cable endpoints. Default true.
bShowRideTetherboolShow a visible tether rope from the rider to the cable while riding. Requires the riding character to have a Tether Component. To adjust rope origin, camera clipping, or nozzle, configure PlayerAttachSocket, PlayerAttachOffset, PlayerNozzleParticles, and PlayerBodyRadius on the rider's Tether Component (Tether and Tether | Nozzle categories). Default true.
RideSlideSpeedfloatManual slide input speed while riding (cm/s). Used with AddRideSlideInput. Default 500.
Functions
Begin ride. Returns false if cable not rideable or already occupied.
End ride. Restores gravity.
Reverse ride direction mid-ride.
Manual speed control while riding. -1 to 1 per tick.
Get the character currently riding this cable. Returns null if not riding.
Check whether a character is currently riding any cable. Static utility.
Find the Cable Actor a character is currently riding. Returns null if not riding. Static utility.
Check whether the local player is currently riding any cable. Static utility.
Stop the local player's current ride. Static utility.
Reverse the local player's current ride direction. Static utility.
Add slide input to the local player's current ride. Static utility.
Events
Tip
Critically damped spring force toward the hang point (no oscillation). All forces go through Character Movement Component (AddForce). Internal Zipline Component handles the physics (hidden from Blueprint).
Tether Point RAC Tether Point
Standalone - Placeable anchor point for tether connections.
A placeable tether anchor point. Drop into your level to create attachment locations for the Tether Component. Connect via TetherToActor(TetherPoint). Optional mesh visual and detection sphere for overlap-based discovery.
Tether Point
SceneRootScene ComponentRoot scene component. Read-Only
PointMeshStatic Mesh ComponentOptional visual mesh for the anchor point. Set a mesh to make the point visible in-game.
DetectionSphereSphere ComponentOverlap sphere for detecting nearby characters. Read-Only
DetectionRadiusfloatRadius of the detection sphere. Default 300.
TetherSocketNameSocket name on the mesh for precise tether attachment. Leave empty for actor origin.
TetherOffsetVectorOffset from origin (or socket) for tether attachment point. Default (0,0,0).
Tether Component RAC Tether
Standalone - Works with any target: Cable Actors, other Actors, or world points.
Visible rope to any target. Add to your character and call TetherToCable, TetherToWrappingCable, TetherToActor, or TetherToPoint to connect. Creates a visual link cable between the player and the attachment point. Supports pull-back mode, leash physics, connect/disconnect animations.
Tether
bPullBackModeboolStay connected when the player moves beyond TetherLeashLength. Fires OnTetherPullBack event each tick instead of allowing free movement. Does NOT apply force on its own - use bApplyTensionToMovement for physics-based pull, or use the event for custom gameplay logic. Default false.
bLockTetherboolPrevent all automatic disconnection. Only Detach() can break the connection while locked. Default false.
bApplyTensionToMovementboolApply cable tension as movement force to owner's CharacterMovementComponent. Spring/bungee leash. Requires owner to be a Character. Default false.
TetherLeashLengthfloatSlack distance from attach point before pull begins. Player moves freely within this radius. Default 100.
TensionForceMultiplierfloatPull acceleration per unit of stretch beyond leash. ~2 = gentle, ~10 = strong, ~20+ = hard yank. Default 5.0.
TensionDampingfloatVelocity damping along pull direction. Prevents spring oscillation. 0 = no damping, ~8 = smooth. Default 0.
PlayerAttachSocketNameBone/socket on owner mesh for link cable attachment. None = actor origin. Default None.
PlayerAttachOffsetVectorOffset from socket or actor origin. Default (0,0,0).
bAttachOffsetInViewSpaceboolRotate offset into camera local space. Default false. Advanced
ReconnectCooldownfloatCooldown (seconds) after disconnect before the tether can reconnect. Gives the player time to move away. 0 = no cooldown. Default 0.
TetherSlideSpeedfloatSpeed for sliding the attach point along a cable (cm/s at full input). Use with SlideTetherAlongCable. Default 500.
TetherSlideGravityScalefloatHow strongly gravity pulls the slide point along the cable's slope when no input is held. 0 = no gravity slide, 1 = full gravity projection. Default 1.0.
TetherSlideFrictionfloatFriction opposing gravity-driven slide. Higher = more resistance. 0 = frictionless. Default 0.15.
TetherSlideMaxSpeedfloatMaximum gravity-driven slide speed (cm/s). 0 = no cap. Default 600.
CableTrackSpeedfloatHow fast the attach point tracks along the cable when tethered. Higher = snappier following. Default 15.
bIsTetheredboolTrue while connected. Read-Only
TetherTargetTypeERACTetherTargetTypeCurrent target type: None, Cable, WrappingCable, Actor, or Point. Read-Only
TetherTargetActor ReferenceActor currently tethered to (Cable or Actor target). Null for Point targets. Read-Only
CurrentAttachPointVectorCurrent attach point on the target. Read-Only
Tether | Rope
LinkCableMeshStatic MeshMesh for link cable segments. Null = engine cylinder.
LinkCableMeshScaleVector 2DCross-section scale. Default (0.3, 0.3).
LinkCableSegmentsIntegerNumber of segments. Default 6.
LinkCableSolverIterationsIntegerSolver iterations. Default 4. Advanced
LinkCableGravityScalefloatGravity for link cable. Default 1.0.
LinkCableDampingfloatVelocity damping. Default 0.05. Advanced
RopeEndpointSmoothingfloatHow fast the rope endpoint tracks the player. 0 = instant (snappy but can jitter), 15-25 = smooth chase. Default 0.
LinkCableDriftStrengthfloatDrift strength. Default 3.0. Advanced
bForceStraightLinkCableboolForce the link cable into a perfectly straight line each frame. Useful for zipline tethers where slack looks wrong. Default false. Advanced
MaxLinkCableLengthfloatMax link cable length. When exceeded, the tether auto-disconnects (unless bLockTether is true). 0 = unlimited. Default 0.
bLinkCableCanBeCutboolWhether the link cable can be cut. Default false.
LinkCableMaterialMaterialMaterial for link cable.
LinkFlowTilingfloatUV flow tiling. Default 1.0.
bLinkCastShadowboolCast shadow from link cable meshes. Default false. Advanced
bLinkReceiveDecalsboolWhether link cable and endpoint meshes receive decals. Default true. Advanced
Tether | Nozzle
PlayerNozzleParticlesIntegerRigid particles at the player end, forming a stiff nozzle section. 0-6. Default 0. Advanced
PlayerNozzleDirectionVectorDirection of the rigid nozzle in character-local space. (0,0,-1) = straight down. Uses camera rotation when bPlayerNozzleFollowCamera is true. Default (0,0,-1). Advanced
bPlayerNozzleFollowCameraboolWhen true, the player nozzle direction rotates with the camera instead of the character. Default false. Advanced
AttachNozzleParticlesIntegerRigid particles at the attach end. 0-6. Default 0. Advanced
AttachNozzleDirectionVectorDirection of the attach nozzle in world space. Zero = auto-calculated from cable tangent. Default (0,0,0). Advanced
PlayerBodyRadiusfloatInvisible sphere around the player that pushes cable particles out (prevents body clipping). 0 = disabled. Default 0. Advanced
PlayerBodyOffsetVectorOffset of the body avoidance sphere from player origin. Default (0,0,0). Advanced
Tether | Endpoint Meshes
LinkAttachMeshStatic MeshMesh displayed at the attach point (where the link cable meets the target). Null = no indicator.
LinkAttachMeshMaterialMaterialMaterial override for the attach-point mesh (slot 0).
LinkAttachMeshScaleVectorScale of the attach-point mesh. Default (1,1,1).
bOrientAttachMeshAlongCableboolOrient along the main cable's tangent when tethered to a cable. Default false. Advanced
LinkAttachOffsetVectorWorld-space offset applied to the link cable's attach endpoint. Default (0,0,0). Advanced
LinkCableConnectionOffsetVectorOffset where the link cable connects to the attach-point endpoint mesh. Shifts the cable endpoint relative to the mesh. Default (0,0,0).
LinkAttachMeshRotationOffsetRotatorRotation offset on top of auto-orientation. Default (0,0,0). Advanced
LinkPlayerMeshStatic MeshMesh displayed at the player end of the link cable. Null = no indicator.
LinkPlayerMeshMaterialMaterialMaterial override for the player-end mesh (slot 0).
LinkPlayerMeshScaleVectorScale of the player-end mesh. Default (1,1,1).
LinkPlayerMeshRotationOffsetRotatorRotation offset for the player-end mesh. Default (0,0,0). Advanced
Tether | Connect Animation
bExtendOnConnectboolVisual extend animation on connect. Default false.
ExtendOnConnectSpeedfloatExtension speed in units/sec. Default 500.
bIsExtendingboolTrue while extend animation is playing. Read-Only
bExtendHideAttachMeshboolHide attach mesh during extend animation. Default true. Advanced
Tether | Disconnect Animation
bRetractOnDisconnectboolVisual retract animation on disconnect. Default false.
RetractSpeedfloatRetraction speed in units/sec. Default 500.
bIsRetractingboolTrue while retract animation is playing. Read-Only
bRetractHideAttachMeshboolHide attach mesh during retract animation. Default true. Advanced
Debug
bDrawDebugLinkLineboolDraw debug lines for the link cable. Default false.
DebugLinkLineColorFColorColor of link cable debug lines. Default Green. Advanced
bDrawDebugPlayerBodyboolDraw debug sphere showing player body avoidance radius. Default false. Advanced
Functions
Connect to a Cable Actor. Finds nearest point on the cable.
Connect to a Wrapping Cable. Finds nearest point on the cable.
Connect to any actor. Optional socket and offset for precise attachment.
Connect to a fixed world position.
Disconnect from current target.
Lock/unlock the tether. While locked, only Detach() can break the connection.
Get the Cable Actor this tether is currently connected to. Returns null if not tethered to a cable (e.g. tethered to an actor or point, or not tethered at all).
Override attach point to a fixed world position. Tether skips nearest-point tracking while active.
Return to normal nearest-point tracking.
Slide the attach point along the connected cable. Direction: -1 to 1. Only works when tethered to a cable. Use with bApplyTensionToMovement to pull the player.
Stop sliding and return to normal cable tracking.
Whether the tether is currently in slide mode (driven by SlideTetherAlongCable input).
True while the reconnect cooldown is active after disconnect. Use with ReconnectCooldown property.
Reset the reconnect cooldown so the next connect attempt is not blocked. Used by internal systems (ride/zipline).
Events
Fires each tick player is beyond leash length while pull-back mode is on.
Cable Interaction Component RAC Cable Interaction
Both cable types - Detects, grabs, and cuts both. Pinning and extend/retract are
Cable Actor only.
Player component for cable interaction: grab, drag, pin, cut, extend/retract. Supports two detection modes: Proximity (overlap radius, best for top-down) or Aim (camera crosshair ray, best for first/third person). All actions work identically in both modes.
Detection Mode
DetectionModeERACDetectionModeHow to find cables: Proximity (overlap radius) or Aim (camera ray). Default Proximity.
DetectionIntervalfloatHow often to scan for cables (seconds). 0 = every frame. Default 0.05.
Auto Tether
bAutoTetherOnDetectboolAuto-connect the owner's Tether Component when a cable is within AutoTetherRadius. Independent of DetectionMode. Requires Tether Component on same actor. Default false.
AutoTetherRadiusfloatProximity radius for auto-tether detection. Independent of InteractionRadius and DetectionMode. Only used when bAutoTetherOnDetect is true. Default 300.
Proximity Settings
InteractionRadiusfloatDetection range for nearby cables. Only visible in Proximity mode. Default 500.
Aim Settings
AimDistancefloatMax trace distance (cm). Only visible in Aim mode. Default 5000.
AimRadiusfloatForgiveness radius around aim ray (cm). Higher = easier to target. Default 80.
bTraceFromCameraboolTrace from player camera (crosshair). When false, traces from actor forward. Default true.
bAimOcclusionCheckboolBlock cable detection when a physics object is closer than the cable along the aim ray. Prevents interacting through walls. Default false.
AimOcclusionChannelCollision ChannelCollision channel for occlusion traces. Default Visibility.
Grab Settings
bPinOnGrabboolPin the cable at grab point. Default true.
bDragWithPlayerboolProximity: follows player position. Aim: follows aim point. Default true.
AutoReleaseDistancefloatAuto-release when player/aim moves beyond this distance from grab point. 0 = never. Default 0.
MaxStretchDistancefloatMax distance the grabbed point can be dragged from the original grab location. 0 = fall back to the cable's own MaxStretchDistance. If both are 0, unlimited. Default 0.
MaxSlideSpeedfloatMax slide speed along cable while grabbed. 0 = unlimited. Proximity mode only. Default 0.
State
NearestCableCable ActorCable Actor Nearest/aimed cable (null if none). Read-Only
NearestPointVectorClosest point on nearest cable to player or aim ray. Read-Only
NearestParticleIndexIntegerCable Actor Particle index on nearest cable. Read-Only
NearestDistancefloatDistance to nearest cable (world distance or aim ray offset). Read-Only
bIsGrabbingboolWhether currently grabbing a cable. Read-Only
bNearestIsPinboolTrue when the detected point is at a pin mesh (player is aiming at or near a pin). Check this to decide between grab vs unpin. Read-Only
GrabbedCableCable ActorCable Actor Cable currently grabbed. Read-Only
GrabPointVectorWorld position of grab point. Read-Only
GrabbedParticleIndexIntegerCable Actor Index of grabbed particle. Read-Only
NearestWrappingCableWrapping CableWrapping Cable Nearest/aimed wrapping cable (null if none, or if a regular cable is closer). Read-Only
GrabbedWrappingCableWrapping CableWrapping Cable Wrapping cable currently being grabbed (null when not grabbing a wrapping cable). Read-Only
Functions
Both types Grab the nearest/aimed cable. No-op if no cable detected or already grabbing.
Cable Actor Grab a specific cable at the closest point to the player.
Both types Release the currently grabbed cable.
Cable Actor Begin continuous extension on grabbed cable.
Cable Actor Stop continuous extension on grabbed cable.
Cable Actor Begin continuous retraction on grabbed cable.
Cable Actor Stop continuous retraction on grabbed cable.
Cable Actor One-shot length change on grabbed cable.
Pinning Cable Actor
Pin the nearest/aimed cable at the detected point. Returns particle index, or -1.
Pin the grabbed cable at the current grab point.
Pin a specific cable at a world position.
Pin the nearest/aimed cable to an actor (follows it). Returns particle index, or -1.
Pin a specific cable particle to an actor.
Unpin a specific particle on a cable.
Unpin the nearest pinned particle to a position.
Remove the nearest pin on the nearest/aimed cable. Returns particle index, or -1.
Clear all pins on a cable.
Cutting
Cut the nearest/aimed cable at the detected point. Returns the new tail cable, or null. Releases grab if cutting the grabbed cable.
Cut a specific cable at a world position.
Queries
Whether a cable is within interaction range or being aimed at.
Get current aim ray (Aim mode only). Returns false if not in Aim mode.
Cable Actor Query the current detection state. Returns the detected cable, closest point, particle index, and distance. Returns false if no cable is detected.
Wrapping Cable Get the detected wrapping cable (if any). Returns true if a wrapping cable is detected. No particle index - wrapping cables use sections, not indexed particles.
Events
Cable Actor A cable entered detection range or became the aimed cable.
Cable Actor A cable left detection range or is no longer aimed at.
Cable Actor Player grabbed a cable.
Both types Player released a cable.
Both types Fires each tick while grabbing, with updated grab point position.
Cable Actor Fires when a cable is pinned via this component.
Cable Actor Fires when a cable is unpinned via this component.
Fires when a cable is cut via this component (manual or sweep). Works with both cable types.
Fires each time a cable is cut during sweep cutting. Also fires On Cable Cut. Works with both cable types.
Wrapping Cable Fires when a wrapping cable enters detection range.
Wrapping Cable Fires when a wrapping cable leaves detection range.
Sweep Cut
Move your aim (or player position) across cables to slice through them in one motion. Detects and cuts both Cable Actors and Wrapping Cables. Cables are cut when they enter the sweep radius, not while standing still. Works with both Aim and Proximity detection modes. See Cable Cutting for setup and general cutting info.
Sweep Cut Settings
SweepCutRadiusfloatRadius of the sweep blade. Cables within this distance of the aim ray or player are cut when swept across. Default 100.
SweepCutDistancefloatMax reach. Aim mode: how far the cut ray extends (0 = use AimDistance). Proximity mode: how far from the player (0 = use SweepCutRadius). Default 0.
MaxSweepCutsPerFrameIntegerMaximum cables to cut per frame during sweep cutting. Limits worst-case frame spikes when slicing through dense cable clusters. 0 = unlimited. Default 0.
bIsSweepCuttingboolWhether sweep cutting is currently active. Read-Only
Begin sweep cutting. Move the aim/player across cables to slice them.
Toggle sweep cutting on or off.
Swing Component RAC Swing
Standalone - Does not require a Cable Actor. Spawns its own temporary grapple rope from an aim trace hit.
Grapple rope swing. Fires an aim trace from the character's camera to find a pivot point, spawns a temporary Verlet cable rope, and applies pendulum physics. Supports pump-swing (player input increases amplitude), rope reel-in/let-out, launch velocity boost on release, and configurable rope visuals. Tick disabled until swing starts.
Swing
AimTraceLengthfloatHow far the grapple aim trace reaches (cm). Default 5000.
AimTraceChannelCollision ChannelCollision channel for the aim trace. Default Visibility.
SwingGravityScalefloatGravity scale during swing. 1.0 = realistic pendulum. Default 1.0.
SwingAirControlfloatOverrides character AirControl during swing. 0 = pure pendulum (no WASD), 0.1 = slight steering, 1 = full air control, -1 = don't override. Default 0.1.
AirDragfloatAir resistance to prevent infinite speed. 0 = none. Default 0.02.
bRigidRopeboolFixed rope length (always taut) vs slack rope (only constrains when taut). Default false.
MinRopeLengthfloatMinimum rope length. Default 100. Advanced
MaxRopeLengthfloatMaximum rope length. 0 = uses distance at swing start. Default 0. Advanced
LaunchVelocityMultiplierfloatMultiplier on release velocity. 1.0 = realistic, >1 = boosted. Default 1.0.
LaunchUpwardBoostfloatExtra upward velocity on release (cm/s). Default 0.
bAutoPullInboolAutomatically shorten the rope each tick, pulling the character toward the pivot. Great for grapple-hook reel-in. Default false.
AutoPullSpeedfloatSpeed at which the rope shortens when bAutoPullIn is enabled (cm/s). Default 300.
bEnablePumpSwingboolPlayer input increases swing amplitude (like pumping a playground swing). Default true.
PumpForcefloatTangential force when pumping (mass-compensated). Default 800.
Swing|Rope
RopeAttachSocketNameSocket on the character's mesh to attach the rope endpoint. None = character root. Useful for attaching to a hand bone.
RopeSegmentsIntegerNumber of verlet segments for the spawned grapple rope. More = smoother, fewer = cheaper. Default 8.
RopeSubstepsIntegerPhysics sub-steps per frame. Higher = smoother rope at high speeds. Default 2.
RopeEndpointSmoothingfloatHow fast the rope endpoint tracks the character. 0 = instant (snappy but can jitter), 15-25 = smooth chase. Default 0.
RopeMeshStatic MeshMesh used for each rope spline segment. Null = engine cylinder.
RopeMaterialMaterialMaterial for the rope. Null = mesh default.
RopeMeshScaleVector 2DCross-section scale of the rope mesh. Default (0.15, 0.15).
bRopeCollisionboolEnable world collision on the swing rope so it drapes over geometry. Default true.
bRopeHighFidelityCollisionboolPer-particle sphere traces instead of simple line checks. More accurate on curved surfaces but more expensive. Only available when bRopeCollision is true. Default false.
bCameraAvoidanceboolPush rope particles away from the camera so the rope doesn't clip through the view during fast swings. Default false.
CameraAvoidanceRadiusfloatMinimum distance rope particles maintain from the camera (cm). Default 80.
bExtendRopeOnAttachboolRope visually extends from the character to the pivot when starting a swing, like firing a grapple hook. OnSwingStart is deferred until the rope reaches the pivot. Default false.
RopeExtendSpeedfloatSpeed at which the rope extends toward the pivot point (cm/s). Only used when bExtendRopeOnAttach is true. Default 3000.
bRetractRopeOnDetachboolRope visually retracts back to the character when releasing the swing, instead of disappearing instantly. Default false.
RopeRetractSpeedfloatSpeed at which the rope retracts back to the character (cm/s). Only used when bRetractRopeOnDetach is true. Default 3000.
State Read-Only
bIsSwingingboolWhether a character is currently swinging. Read-Only
CurrentPivotPointVectorWorld position of the pivot particle. Read-Only
CurrentRopeLengthfloatCurrent rope length (may change with ShortenRope/LengthenRope). Read-Only
CurrentSwingSpeedfloatCurrent swing speed (cm/s). Read-Only
bIsRopeExtendingboolTrue while the rope is extending toward the pivot. Read-Only
bIsRopeRetractingboolTrue while the rope is retracting after release. Read-Only
Functions
Start swinging. Fires an aim trace from the character's camera and attaches a grapple rope to the hit point. Returns false if nothing hit or already swinging.
Start swinging at an explicit world position. Spawns a grapple rope from the character to the given pivot point.
Stop swinging. Character launches with current velocity (modified by LaunchVelocityMultiplier + LaunchUpwardBoost).
Pump-swing input [-1, 1]. Positive = pump in swing direction. Call each tick from input.
Reel in the rope by amount (cm). Clamped to MinRopeLength.
Let out rope by amount (cm). Clamped to MaxRopeLength (if > 0).
Current rider, null if nobody is swinging.
Static. Find the swing component a character is using (null if not swinging).
Static. Check if a character is swinging on any cable.
Static. Check if local player (player 0) is swinging.
Static. Find the swing component the local player (player 0) is using. No character input needed.
Static. Stop the local player's swing. Does nothing if not swinging.
Events
Fires when swing ends. LaunchVelocity = final velocity applied (after multiplier + boost).
Fires each tick during swing.
Tip
Velocity-projection pendulum constraint. Gravity-driven arc with optional pump-swing. Spawns a temporary VerletCable rope visual. Tick disabled when idle.
Pull Component RAC Pull
Standalone - Does not require a Cable Actor. Spawns its own temporary rope to pull physics objects.
Pull physics objects toward the owner. Fires an aim trace from the character's camera, attaches a rope to the hit physics object, and applies mass-compensated force to reel it in. Supports mass limits, arrival detection, and duration caps. Tick disabled when idle.
Pull
AimTraceLengthfloatHow far the pull aim trace reaches (cm). Default 5000.
AimTraceChannelCollision ChannelCollision channel for the aim trace. Default Visibility.
PullForcefloatForce applied each tick toward the owner (mass-compensated). Higher = faster pull. Default 100.
PullMaxMassfloatMaximum mass that can be pulled. 0 = no limit. Objects heavier than this fail with "TooHeavy". Default 0.
RopeRetractSpeedfloatSpeed at which the rope shortens during pull (cm/s). Default 500.
ArrivalDistancefloatDistance from owner at which the pull completes and the object is released (cm). Default 150.
MaxPullDurationfloatMaximum pull duration (seconds). 0 = no limit. Auto-releases after this time. Default 0. Advanced
Pull|Rope
RopeSegmentsIntegerNumber of verlet segments for the pull rope. Default 6.
RopeSubstepsIntegerPhysics sub-steps per frame. Higher = smoother rope at high speeds. Default 2.
RopeEndpointSmoothingfloatHow fast the rope endpoint tracks the target. 0 = instant, 15-25 = smooth chase. Default 0.
RopeMeshStatic MeshMesh for each rope spline segment. Null = engine cylinder.
RopeMaterialMaterialMaterial for the rope. Null = mesh default.
RopeMeshScaleVector 2DCross-section scale of the rope mesh. Default (0.15, 0.15).
bRopeCollisionboolEnable world collision on the pull rope. When enabled, segments are auto-increased to at least 16 so the rope has enough bend points to wrap around corners. Default false.
bHighFidelityRopeCollisionboolUse segment-to-segment traces so the rope wraps around corners instead of clipping through geometry. More expensive but needed for pull-around-corner scenarios. Requires bRopeCollision. Default false.
State Read-Only
bIsPullingboolWhether a pull is currently active. Read-Only
PulledActorActor ReferenceThe actor currently being pulled. Null if not pulling. Read-Only
CurrentRopeLengthfloatCurrent rope length during pull. Read-Only
Functions
Aim trace from the character's camera. Pulls the hit physics object toward the owner. Returns false if nothing hit, target not simulating physics, or too heavy.
Pull a specific actor toward the owner. Returns false if the actor has no simulating physics body or is too heavy.
Check if an actor can be pulled (has a simulating physics body and is within mass limit). Pure.
Release the currently pulled object. Does nothing if not pulling.
Get the actor currently being pulled. Null if not pulling.
Events
Fires when a pull begins.
Fires when the pulled object arrives within ArrivalDistance.
Fires when pull is manually released via ReleasePull.
Fires when a pull attempt fails. Reason: "NoHit", "NotSimulating", "TooHeavy".
Tip
Mass-compensated force ensures consistent pull speed regardless of object weight. Use PullMaxMass to prevent pulling immovable-scale objects. OnPullFailed gives BP-friendly feedback for UI prompts.
Climb Component RAC Climb
Standalone - Grab onto any Cable Actor or Wrapping Cable and climb with input-driven movement and gravity sliding.
Rope climbing component. Aim trace from the camera to find a cable, grab on, and climb up or down. Gravity-based sliding when idle, optional stamina system, launch velocity on release. Works with both ARACCable and ARACWrappingCable. Zero-cost when idle (tick disabled).
Climb
AimTraceLengthfloatHow far the grab aim trace reaches (cm). Default 3000.
AimTraceChannelCollision ChannelCollision channel for the aim trace. Default Visibility.
MaxGrabDistancefloatMaximum distance from the cable surface to grab (cm). If the nearest point is farther, grab fails. Default 500.
ClimbSpeedfloatSpeed at which the character climbs up/down when holding input (cm/s). Default 400.
MaxSlideSpeedfloatMaximum gravity-driven slide speed (cm/s). 0 = no cap. Default 600.
GravitySlideScalefloatHow strongly gravity pulls the character along the cable's slope. 0 = no slide, 1 = full gravity projection. Default 1.0.
ClimbFrictionfloatFriction that opposes slide velocity. Higher = cable feels rougher. 0 = frictionless. Default 0.15.
ClimbOffsetfloatDistance (cm) the character stands back from the cable while climbing. 0 = right on the cable. Default 75.
bSlideWhenIdleboolWhen the player releases climb input, automatically slide down due to gravity. When false, the character holds position. Ignored if bFreefallOnRelease is true. Default true.
bFreefallOnReleaseboolWhen the player releases climb input, immediately let go of the cable and freefall. Overrides bSlideWhenIdle. Default false.
bLaunchOnReleaseboolApply launch velocity when releasing the cable. Default true.
LaunchVelocityMultiplierfloatMultiplier on current velocity when launching off the cable. Default 1.0.
LaunchUpwardBoostfloatAdditional upward velocity on release (cm/s). Gives a "jump off rope" feel. Default 300.
bUseStaminaboolEnable stamina system. When stamina runs out, the character auto-releases. Default false.
MaxStaminafloatMaximum stamina (seconds of climbing). Default 5.0.
StaminaDrainRatefloatStamina consumed per second while actively climbing (holding input). Default 1.0.
StaminaDrainWhileSlidingfloatStamina consumed per second while sliding (typically less than climbing). Default 0.3.
State Read-Only
bIsClimbingboolWhether the character is currently climbing. Read-Only
CurrentClimbPointVectorCurrent position on the cable where the character is attached. Read-Only
ClimbProgressfloatProgress along cable: 0.0 = start, 1.0 = end. Read-Only
CurrentSlideSpeedfloatCurrent slide velocity along the cable (cm/s). Read-Only
CurrentStaminafloatCurrent stamina remaining (0 to MaxStamina). Only meaningful when bUseStamina is true. Read-Only
bIsSlidingboolWhether the character is currently sliding (gravity-driven, no input). Read-Only
CableTangentAtClimbPointVectorCable direction at the current climb point. Points from cable start toward end. Use for character orientation, IK hand placement, body alignment. Read-Only
NormalizedClimbSpeedfloatNormalized climb speed for animation blend spaces. -1 = max speed downward, 0 = idle, +1 = max speed upward. Read-Only
ClimbRotationRotatorSuggested world rotation for the climbing character. Faces the cable surface with world-up orientation. Computed from ClimbOffset direction at grab time. Read-Only
bHasClimbInputboolWhether the player is actively providing climb input this frame. Distinguishes "actively pulling" from "hanging idle" and "sliding". Read-Only
Functions
Aim trace from the camera, find the nearest cable, and grab onto it. Returns false if nothing hit, no cable nearby, already climbing, or too far.
Start climbing a specific ARACCable at the nearest point to the character.
Start climbing a specific ARACWrappingCable at the nearest point to the character.
Release the cable. Character drops off with optional launch velocity.
Apply climb input. Positive = move toward cable end, negative = toward start. Clamped to [-1, 1]. Call each tick from player input.
Get the character currently climbing. Null if nobody.
Get the Cable Actor currently being climbed. Null if not climbing or climbing a Wrapping Cable.
Get the Wrapping Cable currently being climbed. Null if not climbing or climbing a regular Cable Actor.
Find the Climb Component that is currently climbing with a given character. Returns null if the character is not climbing. Static helper.
Check if a character is currently climbing any cable. Static helper.
Find the local player's active Climb Component. Returns null if not climbing. Static helper.
Check if the local player is currently climbing. Static helper.
Stop the local player's climb. One-node convenience. Does nothing if not climbing. Static helper.
Feed climb input to the local player's active climb. Convenience for demo/prototype input. Static helper.
Events
Fires when climbing begins.
Fires when climbing ends. LaunchVelocity is the velocity applied to the character on release.
Fires each tick during climbing with current progress and position.
Fires when the climber reaches the cable's end.
Fires when the climber reaches the cable's start.
Fires when the climber starts sliding (transitions from input-driven to gravity-driven).
Fires when a climb attempt fails. Reason: "NoHit", "NoCable", "AlreadyClimbing", "TooFar".
Tip
Works with both Cable Actors and Wrapping Cables. Use bClimbable on cables to gate which cables can be climbed. The stamina system provides natural gameplay limits - drain rate is lower while sliding than actively climbing.
Tow Component RAC Tow
Component - Physics-based vehicle towing via temporary cable.
Spawns a cable with physics coupling between the owning actor and a target. Spring forces pull the towed target along. Supports break force, stretch limits, and tension events. Tick disabled when idle.
Tow
bAutoConnectboolAutomatically connect to the nearest tow target on BeginPlay. Default false.
AutoConnectSearchRadiusfloatSearch radius for auto-connect (cm). Only used when bAutoConnect is true. Default 2000.
TowAttachSocketNameSocket on the owning actor for the tow hitch point.
TowAttachOffsetVectorOffset from the owner's origin or socket for the tow hitch point. Default (0,0,0).
TargetAttachSocketNameSocket on the target actor for the tow attachment point.
TargetAttachOffsetVectorOffset on the target actor for the tow attachment point. Default (0,0,0).
bIsTowingboolWhether actively towing a target. Read-Only
TowTargetActor ReferenceThe actor currently being towed. Read-Only
TowCableCable ActorThe spawned tow cable actor. Read-Only
CurrentTensionfloatCurrent tension ratio: 0 = slack, 1 = fully taut. Read-Only
CurrentForcefloatCurrent force magnitude being applied by the tow cable. Read-Only
Tow | Physics
TowStiffnessfloatSpring stiffness for the tow force. Higher = rigid tow bar, lower = elastic bungee. Default 8000.
TowDampingfloatVelocity damping to prevent oscillation. Reduces bouncing when the cable goes taut. Default 800.
bBidirectionalboolApply forces to both ends. When false, only the towed target receives force (owner acts as immovable anchor). Default true.
MaxTowForcefloatHard cap on the applied tow force. 0 = use default cap (stiffness * cable length). Default 0. Advanced
BreakForcefloatForce threshold that snaps the tow cable. 0 = unbreakable. Default 0.
BreakStretchfloatMaximum stretch distance (cm) before the cable snaps. 0 = no stretch limit. Default 0.
bNoStretchboolPrevent the cable from stretching beyond its length. Enforces a hard distance constraint by clamping actor positions and removing separating velocity. Good for chains and rigid tow bars. Default false. Advanced
Tow | Cable
TowCableLengthfloatCable length in cm. 0 = auto-calculate from distance * TowSlackMultiplier. Default 0.
TowSlackMultiplierfloatAuto-length slack factor. 1.0 = taut, 1.15 = 15% slack for natural drape. Default 1.15.
NumSegmentsIntegerNumber of simulation segments. More = smoother cable. Default 12.
GravityScalefloatGravity scale for the tow cable. Default 1.0.
bEnableCollisionboolEnable world collision on the tow cable. Default true.
bHighFidelityCollisionboolTrace Every Substep (Expensive) - Per-substep collision for fast-moving cables. Prevents tunneling through geometry. Default false.
Tow | Appearance
TowCableMeshStatic MeshMesh for cable spline segments. Null = default engine cylinder.
TowCableMaterialMaterialMaterial for the tow cable. Null = mesh default.
TowCableMeshScaleVector 2DCross-section scale of the cable mesh. Default (0.5, 0.5).
Tow | Performance
bEnableLODTiersboolEnable distance-based LOD tiers on the tow cable. Sleeping cables pause simulation and hide visuals. Default true.
SleepDistancefloatCamera distance at which the tow cable pauses simulation and hides. 0 = never sleep. Default 5000.
Functions
Connect a tow cable to the target actor. Spawns a cable with physics coupling. Returns false if already towing, target is null, or spawn fails.
Disconnect and destroy the tow cable.
Find the nearest Tow Target Component and attach a tow cable to it. Uses the target's AttachSocket and AttachOffset. Default search radius 2000. Returns false if no towable target found.
Whether currently towing a target. Pure.
Current tension ratio: 0 = slack, 1 = taut. Pure.
Current force magnitude applied by the tow cable. Pure.
Set the tow cable length at runtime.
Adjust the tow cable length by a delta. Positive = longer, negative = shorter.
Events
Fires when the tow cable connects to a target.
Fires when the tow cable disconnects from a target.
Fires when the tow cable snaps due to exceeding BreakForce or BreakStretch.
Fires each tick while the cable is under tension. TensionRatio 0-1, Force in Newtons, Direction is the pull vector.
Tip
Target actor root must be a UPrimitiveComponent with IsSimulatingPhysics()=true for forces to apply. Logs warning otherwise (cable still works visually). Internally uses SpawnCableBetween + bDriveStartPhysics/bDriveEndPhysics. LOD settings forwarded to the spawned cable. Tick disabled when idle.
Tow Target RAC Tow Target
Component - Marker that makes an actor discoverable as a tow target.
Place on any actor (vehicle, prop, crate) so that the Tow Component can find it via AttachTowToNearest or the static discovery functions. Configure AttachSocket and AttachOffset to control where the tow cable attaches.
Tow Target
AttachSocketNameSocket on this actor where the tow cable attaches.
AttachOffsetVectorOffset from origin/socket for the tow attach point. Default (0,0,0).
bTowableboolWhether this target is currently available for towing. Toggle at runtime to enable/disable. Default true.
PriorityfloatWhen multiple targets are in range, higher priority gets picked first. Default 0.
Functions
Find the nearest towable target within radius. Returns null if none found. Static function.
Find all towable targets within radius, sorted by distance (then priority descending for ties). Static function.
Events
Fires when this target gets towed.
Fires when tow is released from this target.
Verlet Cable Component RAC Verlet Cable
The core physics solver. Simulates particles connected by distance constraints with Verlet integration. Used directly for beams/lasers, or wrapped by the Cable actor for full-featured cables.
Simulation
NumSegmentsIntegerNumber of particles. More = smoother, heavier. Default 20.
CableLengthfloatTarget cable length in world units. Default 1000.
SolverIterationsIntegerConstraint solver passes per substep. Higher = stiffer. Default 8, range 1-64.
DampingfloatVelocity damping. 0 = no damping, 1 = frozen. Default 0.02.
GravityScalefloatMultiplier on world gravity. 0 = floating. Default 1.0.
InitialSpreadfloatRandom offset at spawn for organic shapes. Default 0.
SubstepCountIntegerPhysics substeps per frame. Higher = more stable at cost. Default 2, range 1-8. Advanced
MaxAutoSubstepsIntegerCaps auto-substeps at low FPS. Default 4, range 1-8. Advanced
bPreventStretchingboolPrevents cable segments from stretching beyond their rest length. Use for rigid materials like metal chains, wire rope, or anything that should not elongate. Segments still compress/fold naturally. Default false. Advanced
MaxStretchDistancefloatMax distance any grabbed particle can be dragged from its original position. Per-cable limit (CableInteractionComponent's own MaxStretchDistance takes priority when non-zero). 0 = unlimited. Default 0. Advanced
Simulation | Drift
DriftStrengthfloatGentle ambient movement strength. Default 0.0.
DriftFrequencyfloatHow fast drift direction changes (Hz). Default 0.3.
DriftSmoothnessfloatSmoothness of drift motion. Higher = smoother. Default 8.0, range 1-50. Advanced
bLockDriftXboolDisable drift on the X axis. Default false.
bLockDriftYboolDisable drift on the Y axis. Default false.
bLockDriftZboolDisable drift on the Z axis. Default false.
Simulation | Wind
bUseWorldWindboolSample world wind (Wind Directional Source actor) and apply to cable particles. Default false.
WorldWindScalefloatMultiplier on world wind force applied to the cable. Default 1.0.
WindTurbulencefloatPer-particle Perlin noise modulation on wind force. 0 = uniform wind, 1 = fully noisy. Default 0.5, range 0-1.
WindTurbulenceFrequencyfloatFrequency of wind turbulence noise variation. Higher = faster fluctuations. Default 1.5.
Simulation | Attract Point
AttractPointVectorWorld-space point that particles pull toward. Default (0,0,0).
AttractStrengthfloatPull acceleration toward AttractPoint. 0 = off. Default 0.
bAttractWanderboolPer-cable Perlin noise offset on attract point. Default false.
AttractWanderRadiusfloatWander radius in world units. Default 50.
AttractWanderSpeedfloatWander frequency in Hz. Default 0.5.
Simulation | Rigid Endpoints
StartRigidParticlesIntegerNumber of particles at cable START held stiff in a line. Creates a rigid nozzle section. Default 0, range 0-6.
EndRigidParticlesIntegerNumber of particles at cable END held stiff in a line. Creates a rigid nozzle section. Default 0, range 0-6.
RigidStiffnessfloatHow strongly rigid particles are pulled toward the target line. 0 = no effect, 1 = fully rigid. Soft constraint with automatic falloff. Default 0.8, range 0-1.
bRigidFollowsAttachmentboolWhen true, rigid direction follows the attached actor/component/socket rotation. When false, uses manual direction vectors. Default true.
StartRigidDirectionVectorManual world-space direction for start rigid section. Zero = auto from cable tangent. Only used when bRigidFollowsAttachment is false.
EndRigidDirectionVectorManual world-space direction for end rigid section. Zero = auto from cable tangent. Only used when bRigidFollowsAttachment is false.
Extend/Retract | Auto Length
bAutoLengthboolAuto-set CableLength to match endpoint distance each tick. Cable stays taut. Ideal for beams, lasers, tractor beams. Default false.
AutoLengthMultiplierfloatMultiplier on endpoint distance. 1.0 = perfectly taut, 1.1 = 10% slack. Default 1.0, range 1.0-3.0.
Extend/Retract
ExtendRatefloatExtension speed in units/sec. Used by both auto-extend and manual StartExtending(). Default 0.
MaxCableLengthfloatMaximum cable length. 0 = unlimited. Default 0.
RetractRatefloatRetraction speed in units/sec. Used by both auto-retract and manual StartRetracting(). Default 0.
MinCableLengthfloatMinimum cable length. 0 = unlimited. Default 0.
bAutoExtendboolAutomatically grow cable when pulled taut. Default false.
TensionThresholdfloatTension ratio that triggers extension. Default 0.9.
bAutoRetractboolAutomatically shrink cable when slack. Default false.
RetractTensionThresholdfloatTension ratio below which retraction triggers. Default 0.85.
RetractKeepSlackfloatHow much slack to keep. Default 0.2, range 0.05-0.5.
Performance
SleepDistancefloatCamera distance to enter Sleeping tier. 0 = never sleep. Default 0.
SleepSolverIterationsIntegerSolver iterations while sleeping. 0 = fully frozen. Default 0.
SettleTimefloatSeconds before sleep is allowed. Default 0 on VerletCable, default 2.0 via Cable Point defaults (CableSettleTime).
bEnableLODTiersboolEnable graduated LOD (Full/Medium/Low/Sleeping). Default false.
LODMediumDistancefloatDistance for Medium tier. 0 = auto (33% of SleepDistance). Default 0.
LODLowDistancefloatDistance for Low tier. 0 = auto (66% of SleepDistance). Default 0.
bHideVisualsAtLowboolHide cable visuals at Low LOD to save GPU draw calls. Cable reappears at Medium/Full. Default true.
bHideVisualsAtSleepboolHide cable visuals at Sleeping LOD to save GPU draw calls. Cable reappears when it wakes. Default true.
bDisableShadowsAtLowLODboolDisable shadow casting at Low/Sleeping LOD to save shadow map draw calls. Shadows restore at Medium/Full. Default true.
CurrentLODTierERACCableLODCurrent LOD tier. Read-Only
MaxVisualSegmentsIntegerCap visual segments. 0 = use NumSegments. Default 0. Advanced
LODMediumVisualSegmentsIntegerVisual segments at Medium LOD. 0 = auto (half). Default 0. Advanced
LODLowVisualSegmentsIntegerVisual segments at Low LOD. 0 = auto (quarter). Default 0. Advanced
bSleepAttachedBodiesboolPut attached physics bodies to sleep when the cable sleeps, wake them when it wakes. Off by default - enabling can break gameplay objects (e.g. towed vehicles) that need to keep simulating. Default false. Advanced
Collision
bEnableCollisionboolEnable world collision traces. Default false.
CollisionRadiusfloatTrace radius per particle. Default 5.0.
bHighFidelityCollisionboolTrace Every Substep (Expensive) - Runs collision traces every physics substep (2-4x per frame) instead of once. Only needed for fast-moving cables (grapple ropes, swinging) that clip through walls between substeps. Disables parallel solving for this cable. Default false. Advanced
bSegmentCollisionboolTrace cable segments (particle-to-particle) to catch pass-through on thin geometry. Prevents tunneling through walls that per-particle sweeps miss. Default false.
MaxTracesPerFrameIntegerMax Collision Traces / Frame - The single biggest knob for collision quality. Default 8 spreads traces across frames. 0 = unlimited (all particles every frame, best draping). Increase if the cable clips through surfaces.
bAdaptiveTracePriorityboolAdaptive Trace Priority - Prioritizes fast-moving and in-contact particles for traces. Particles at rest skip their turn so falling/swinging particles get traced every frame. Dramatically improves collision with the same trace budget. Default true.
CollisionFrictionfloatSurface friction. 0 = frictionless, 1 = sticky. Default 0.15. Advanced
bSurfaceCrawlboolProjects drift/attract forces onto surface tangent. Makes cables crawl along surfaces. Default false. Advanced
SurfaceAdhesionfloatForce pressing particles into surfaces. 0 = off. Default 0, range 0-500. Advanced
CollisionChannelCollision ChannelWhich channel to trace for collision. Default WorldStatic.
bCollideWithStartActorboolAllow the cable to collide with the actor attached at its start. When false (default), the start actor is ignored by collision traces. Advanced
bCollideWithEndActorboolAllow the cable to collide with the actor attached at its end. When false (default), the end actor is ignored by collision traces. Advanced
bCollisionLeashboolConstrain at Wrap Points - When the cable wraps around geometry, constrain endpoints within the remaining rope length from the wrap point. Different from Inextensible: this is a local constraint at each wrap point, not a global length limit. Requires collision enabled. Default false.
Attachments
AttachStartToActor ReferenceActor to attach cable start to.
AttachEndToActor ReferenceActor to attach cable end to.
AttachStartComponentTagNameFind sibling component by tag on owning actor for start. Takes priority over AttachStartTo.
AttachEndComponentTagNameFind sibling component by tag on owning actor for end.
AttachStartOffsetVectorLocal offset from start attachment.
AttachEndOffsetVectorLocal offset from end attachment.
AttachStartSocketNameSocket name on start actor.
AttachEndSocketNameSocket name on end actor.
bFreeStartboolSTART endpoint not pinned, simulates freely. Default false.
bFreeEndboolEND endpoint not pinned, simulates freely. Default false.
StartLagSpeedfloatHow fast the START endpoint chases its target. 0 = instant, 10 = snappy, 2 = sluggish. Creates inertia for beams. Default 0. Advanced
EndLagSpeedfloatHow fast the END endpoint chases its target. Same scale. Default 0. Advanced
bDriveStartPhysicsboolCable Pulls Start Actor - The cable applies spring forces to the start actor when stretched. Without this, the cable is cosmetic (follows but never pulls). Requires a simulating physics body. Default false.
bDriveEndPhysicsboolCable Pulls End Actor - The cable applies spring forces to the end actor when stretched. Without this, the cable is cosmetic (follows but never pulls). Requires a simulating physics body. Default false.
EndpointPhysicsStiffnessfloatPull Force Stiffness - Spring strength of the pull force. Higher = rigid rope, lower = elastic bungee. Default 5000.
EndpointPhysicsDampingfloatPull Force Damping - Reduces bouncing/oscillation at the rope limit. Default 0.
Visuals
bEnableVisualsboolEnable built-in spline mesh rendering on this component. Default false.
VisualMeshStatic MeshMesh per segment. Defaults to engine cylinder.
VisualMaterialMaterialMaterial for segments (slot 0). Supports UVOffset/UVScale.
AdditionalVisualMaterialsMaterial ArrayMaterials for additional mesh slots (slot 1, 2, ...) when VisualMesh has multiple material sections. Empty = no extra slots.
VisualMeshScaleVector 2DCross-section scale. Default (0.5, 0.5). Used when taper scales are zero.
VisualFlowTilingfloatUV tiling along cable. Default 1.0.
VisualDistanceScaleFactorfloatDistance-based thickness. 0 = disabled. Default 0. Advanced
bCastShadowboolCast shadow from visual meshes. Default false.
bReceiveDecalsboolWhether visual spline meshes receive decals. Default true.
bDriveMaterialTensionboolAuto-feed the cable's tension ratio (0-1) into a scalar material parameter each tick. Default false.
TensionMaterialParameterNameNameName of the scalar parameter receiving the tension ratio. Default "Tension".
TensionRemapMinfloatTension ratio that maps to 0 in the material. Default 0.
TensionRemapMaxfloatTension ratio that maps to 1 in the material. Default 1.0.
TensionCurvefloatResponse curve exponent applied after remap. <1 = kicks in sooner (more sensitive), >1 = ramps up later (more gradual). Default 1.0, range 0.1-5.0.
MinVisualDistanceScalefloatFloor multiplier for distance scaling. Default 1.0. Advanced
MaxVisualDistanceScalefloatCeiling multiplier for distance scaling. Default 5.0. Advanced
Visuals | Shape
VisualStartScaleVector 2DScale at cable start. (0,0) = use VisualMeshScale. Default (0,0).
VisualEndScaleVector 2DScale at cable end. (0,0) = use VisualMeshScale. Default (0,0).
VisualEndFlarefloatMultiplier on last segment(s) for impact bloom. 1 = none. Default 1.0.
VisualEndFlareSegmentsIntegerHow many end segments ramp to flare. Default 1. Advanced
BeamNoiseAmplitudefloatPerpendicular wobble displacement. Visual only. 0 = off. Default 0.
BeamNoiseSpeedfloatNoise change frequency in Hz. Default 5.0. Advanced
BeamNoiseScalefloatSpatial frequency along cable. Higher = more wiggles. Default 1.0. Advanced
Interaction
bAllowPinningboolPermission gate for pinning particles. Default false.
bAllowUnpinningboolPermission gate for unpinning. Default true.
PinLockDelayfloatSeconds after BeginPlay before bAllowPinning automatically turns off. 0 = never auto-lock. Lets editor-placed systems pin on init, then lock out new pins. Default 0.
bAllowGrabbingboolPermission gate for grabbing. Default true.
Cutting
bAllowCuttingboolPermission gate for cutting. When false, CutAtParticle is a no-op. Default false.
CutImpulseStrengthfloatRandom velocity applied at the cut point for a natural snap effect. Default 10.
Functions
Returns world positions of all simulation particles.
Single particle world position.
Verlet velocity delta (Position - OldPosition). Useful for VFX direction/magnitude.
Number of simulation particles.
Override a particle's position. Not pinned, may be overwritten next tick.
0 = slack, 1 = fully taut.
Inverse of tension ratio.
Sag-normalized tension: 0 = resting drape, 1 = perfectly straight. Automatically calibrates to each cable's natural sag. Used internally by bDriveMaterialTension.
Sum of real segment distances (not target CableLength).
Find the closest point on the cable to a world position. Segment-based (snaps to nearest line segment between particles).
Find the closest particle to a world position.
Get the interpolated world position on the visual spline at a given segment and alpha (0-1). Useful for placing effects or objects along the smoothed cable curve rather than at raw particle positions.
Get the smoothed rope exit direction at an endpoint by sampling multiple particles. From Start = true returns direction from start into the rope. Sample Depth controls how many particles deep to sample (higher = smoother but less local, default 3). Useful for orienting attach meshes or VFX along the cable's actual curvature.
Resolved world-space cable start.
Resolved world-space cable end.
Attach the cable START to an actor, optionally at a socket with an offset. Clears any world-location override.
Set the cable START to a fixed world position. The start stays at this position even if the cable component moves.
Release the cable START to simulate freely (no longer pinned to any target).
Attach the cable END to an actor, optionally at a socket with an offset. Clears any world-location override.
Set the cable END to a fixed world position. The end stays at this position even if the cable component moves.
Release the cable END to simulate freely (no longer pinned to any target).
Re-initialize all particles to a straight line between endpoints.
Begin continuous extension at ExtendRate.
Stop continuous extension.
Begin continuous retraction at RetractRate.
Stop continuous retraction.
Query manual extend state.
Query manual retract state.
Push interior particles with decaying strength (start to end). For origin movement reactions.
Random per-particle push. For startle/transition reactions.
Show/hide all spline meshes without destroying them. Cheapest toggle for beams.
Current LOD tier (Full, Medium, Low, Sleeping).
Whether the cable is in Sleeping tier.
Force this cable to a specific LOD tier, bypassing distance and budget calculations. Useful for debug or cinematic override.
Clear the forced LOD override, returning to normal distance/budget-based LOD.
Static. Returns all active VerletCable components across all worlds. Filter by GetWorld() if needed. Useful for debug tools and global cable queries.
Cutting
Cut the cable at the given particle. Truncates particles to [0..Index], sets bFreeEnd=true, remaps pins, broadcasts OnCableCut. Requires bAllowCutting.
Insert a new particle at the closest point on the cable to the given world position. Returns the index of the new particle.
Pinning
Pin a specific particle at a world position.
Pin a particle to an actor (follows movement).
Release a pinned particle.
Pin the nearest particle to a world position. Returns the particle index.
Unpin the nearest pinned particle to a world position.
Check if a particle is pinned.
Get all pinned particle indices.
Get pin location for a particle. Returns false if not pinned.
Number of active pins on this cable.
Static (Global)
Set global cable LOD budget. Default 8 Full, 16 Medium. 0 = unlimited.
Query current cable budget.
Toggle parallel cable solving across CPU cores. Default true.
Query parallel solve state.
Niagara Integration
RAC exposes cable particle positions to Niagara via a custom Data Interface (RAC Cable Niagara DI). A sample Niagara system (NS_CableParticle) is included - duplicate it and customize, or build your own from scratch.
Cable-Side Setup
On the cable's VerletCable component:
- Check bFeedNiagara
- Set NiagaraSystem to your Niagara system asset
- The cable auto-creates a NiagaraComponent at BeginPlay, discovers itself via attachment, and the DI caches positions every tick
Niagara
bFeedNiagaraboolEnable automatic Niagara feeding. Default false.
NiagaraSystemNiagara SystemNiagara system asset to auto-spawn. A NiagaraComponent is created at BeginPlay and attached to this component.
NiagaraComponentTagNameTag to find an existing NiagaraComponent on the owning actor instead of auto-creating. Only used when NiagaraSystem is not set. Advanced
NiagaraTargetNiagara ComponentThe resolved Niagara component. Auto-set at BeginPlay. Can also be set directly from Blueprints/C++. Transient
NiagaraPositionArrayNameNameName of the RAC Cable DI user parameter on the Niagara system. Default "CableSource".
NiagaraNumPointsNameNameName of the Integer user parameter for spawn count. Empty = don't set. Default "NumPoints".
NiagaraFeedMinLODERACCableLODMinimum LOD tier that still feeds Niagara. Default Medium (feeds at Full and Medium, skips at Low and Sleeping).
Niagara System Setup (Step-by-Step)
You need to create a Niagara system that reads from the RAC Cable Data Interface. This requires familiarity with the Niagara editor.
- Create a Niagara System (empty system, add an empty emitter)
- Add User Parameters at the system level:
- Type "RAC Cable Particles" (under Data Interface), name it
CableSource
- Type int32, name it
NumPoints, default 21
- Emitter Properties: Sim Target = CPU, enable Requires Persistent IDs
- Emitter Update: Add Spawn Burst Instantaneous, link Count to
NumPoints
- Particle Spawn:
- Add Initialize Particle (set Lifetime = 99999)
- Add Set Particles.RibbonLinkOrder = Execution Index (if using Ribbon Renderer)
- Particle Update: Add a Scratch Pad Module:
- Add input: type RAC Cable Particles (DI), name
CableSource
- In the graph: drag CableSource into Map Get, pull wire to GetParticlePosition node
- Wire Execution Index to the Index input
- Wire Position output to Map Set → Particles.Position
- Outside the Scratch Pad: link CableSource input to User.CableSource
- Render: Add a Ribbon Renderer (set CurveTension = 1.0 for sharp tracking) or Sprite Renderer
- Save the system
RAC Cable Niagara Data Interface
Custom Niagara Data Interface that exposes cable particle data. Auto-discovers the cable from the NiagaraComponent's attachment hierarchy. Add as a User Parameter on a Niagara System (type: "RAC Cable Particles").
DI Properties
bIncludeBeamNoiseboolApply the cable's BeamNoiseAmplitude Perlin displacement to positions, matching visual wiggles. Default true. Turn off for raw physics positions only.
SourceCableTWeakObjectPtrCable reference. Set automatically via attachment discovery or manually from C++.
SourceWrappingCableTWeakObjectPtrWrapping cable reference. Set automatically when attached to a wrapping cable.
DI Functions (Available in Niagara Modules)
Total number of cable particles. Use for Niagara spawn count.
World-space position of cable particle at index (clamped to valid range). Includes beam noise displacement when bIncludeBeamNoise is true.
Actual measured cable length (sum of segment distances).
Events
Fires each tick the cable is under tension.
Fires each tick the cable is extending (auto or manual). Provides the new cable length.
Fires each tick the cable is retracting (auto or manual). Provides the new cable length.
Fires once when cable hits MaxCableLength.
Fires once when cable hits MinCableLength.
Fires when a particle is pinned.
Fires when a particle is unpinned.
Fires when the cable is cut at a particle.
Fires each tick after physics solve with all particle world positions. Feed to Niagara, custom meshes, or any external system.
Cable Point Component RAC Cable Point
Cable Actor only - Spawns regular Cable Actors. Does not work with Wrapping Cables.
Place on actors to mark cable endpoints. Supports auto-connect networks, manual connections, Cable Parent system for shared defaults, and editor preview with color-coded debug lines.
Cable Point
bAutoConnectNearbyboolAuto-connect to nearby points at BeginPlay. Default true.
CableChannelIntegerPoints only auto-connect within the same channel. Default 0.
AutoConnectRadiusfloatMax auto-connect distance. Default 5000.
MaxAutoConnectionsIntegerMax connections per point. Default 3, range 1-100.
MinAutoConnectAnglefloatMinimum angle between connections. Default 30 degrees.
bOnlyConnectToParentsboolOnly auto-connect to Cable Parent points. Creates hub/star topologies. Default false.
ManualConnectionActorsActor ArrayPick actors for manual connections. Resolved at BeginPlay.
ConnectionsComponent ArrayActive connections to other cable points. Populated by manual + auto-connect at BeginPlay, or via CreateCableTo in Blueprint.
SpawnedCablesCable Actor ArrayAll cables spawned by/for this point. Read-Only
bShowDebugLinesboolShow editor preview lines. Default true.
DebugLineThicknessfloatLine thickness. Default 2.0, range 0.5-50.
Cable Parent
bIsCableParentboolMark as Cable Parent. Settings flow to all cables in connected network. Default false.
bOverrideCableDefaultsboolOverride parent's Cable Defaults for cables near this point. Default false.
Cable Defaults
CableLengthfloat0 = auto from distance * CableSlackRatio. Default 0.
CableSlackRatiofloatSlack multiplier. 1.0 = taut, 1.2 = natural drape. Default 1.2.
NumSegmentsInteger0 = auto-calculate from distance. Default 0.
MaxSegmentsIntegerMaximum visual spline mesh segments at Full LOD. 0 = no cap. Default 32.
CableGravityScalefloatGravity multiplier for spawned cables. 0 = zero-G (floats), 1 = normal gravity (hangs and drapes). Default 1.0.
CableMeshStatic MeshMesh for cables in this network.
CableMaterialMaterialMaterial for cables in this network.
CableMeshScaleVector 2DCross-section scale for cable mesh. Default (0.5, 0.5).
OverlapCapsuleRadiusfloatOverlap capsule radius for overlap detection on spawned cables. Default 500.
CableInitialSpreadfloatInitial random spread perpendicular to cable axis - creates organic slack shape at spawn. 0 = straight line. Default 0.
CableDriftStrengthfloatAmbient drift force strength (pushes cable into organic curves). 0 = no drift. Default 0.
CableDriftFrequencyfloatHow fast the drift direction changes (Hz). Lower = slower, smoother undulation. Default 0.1.
CableSleepSolverIterationsIntegerSolver iterations when sleeping (0 = fully frozen). Default 0.
CableSettleTimefloatSeconds to simulate before sleep is allowed (cable settles into drape shape). Default 2.0.
CableMaxTracesPerFrameIntegerMax collision traces per frame per cable. 0 = trace all particles every frame. Default 8.
CableMaxAutoSubstepsIntegerCap on auto-calculated substeps at low FPS. Prevents death spiral. Default 2.
CableDistanceScaleFactorfloatDistance-based thickness scaling for far visibility. 0 = disabled. Default 1.0.
bCableEnableCollisionboolEnable collision on spawned cables. Default true.
CableCollisionRadiusfloatCollision trace radius. Default 5.0.
bCableHighFidelityCollisionboolPer-particle sphere traces every substep instead of once per frame. More accurate but more expensive. Default false. Advanced
bCableSegmentCollisionboolTrace cable segments (particle-to-particle) to catch pass-through on thin geometry. Prevents tunneling through walls. Default false.
CableSolverIterationsIntegerSolver iterations per substep (higher = stiffer cable, less sag). Default 6.
CableDampingfloatVelocity damping (0 = no damping, 1 = full damping). Lower values let cables swing more. Default 0.1.
CableSubstepCountIntegerSubsteps per tick. Higher = more stable with fast endpoints but weakens effective gravity. Default 1.
CableSleepDistancefloatDistance from camera before cable sleeps (0 = auto-calculate from cable length). Default 0.
bCableEnableLODTiersboolGraduated LOD. Default true.
bCableCastShadowboolShadow casting. Default false.
bCableReceiveDecalsboolWhether spawned cables receive decals. Default true. Advanced
CableCollisionChannelCollision ChannelCollision trace channel for world collision queries. Default WorldStatic. Advanced
CableCollisionFrictionfloatSurface friction when cable slides on geometry (0-1). Default 0.3. Advanced
CableDriftSmoothnessfloatHow smooth the drift waves are along the cable. Higher = smoother. Default 8.0. Advanced
Cable Defaults | Wind
bCableUseWorldWindboolCable particles are affected by Wind Directional Source actors in the scene. Default false.
CableWorldWindScalefloatMultiplier on the wind force from scene wind sources. Default 1.0.
CableWindTurbulencefloatPer-particle wind variation for organic look. Default 0.5. Advanced
CableWindTurbulenceFrequencyfloatHow fast the wind turbulence pattern changes. Default 1.5. Advanced
Cable Defaults | Appearance
AdditionalCableMaterialsMaterial[]Additional material slots for multi-material cable meshes (slot 1, 2, ...).
CableFlowTilingfloatHow many times the UV tiles along the cable length. Controls texture repetition. Default 1.0.
Cable Defaults | Tension Material
bCableDriveMaterialTensionboolDrive a scalar material parameter based on cable tension ratio. Default false.
CableTensionParameterNameNameName of the scalar parameter on the cable material to drive with tension. Default "Tension". Advanced
CableTensionRemapMinfloatTension below this value maps to 0 in the material. Default 0.0. Advanced
CableTensionRemapMaxfloatTension at this value maps to 1 in the material. Default 1.0. Advanced
CableTensionCurvefloatResponse curve exponent after tension remap. >1 = sharper onset, <1 = gradual. Default 1.0. Advanced
Cable Defaults | Distance Scale
CableMinDistanceScalefloatMinimum thickness multiplier floor for distance scaling. Default 1.0. Advanced
CableMaxDistanceScalefloatMaximum thickness multiplier ceiling for distance scaling. Default 5.0. Advanced
CableDistanceScaleReferencefloatReference distance at which CableMeshScale is used unmodified (0 = auto). Default 0. Advanced
Cable Defaults | Interaction
bCableActiveboolWhether spawned cables start active (gameplay flag for powered/energized state). Default true.
bCableClimbableboolWhether spawned cables can be climbed via Climb Component. Default false.
bCableAllowTetheringboolAllow spawned cables to be auto-tethered by Cable Interaction Component. Default false.
bCableAllowGrabbingboolWhether players can grab spawned cables via Cable Interaction Component. Default true.
bCableAllowPinningboolWhether spawned cables can be pinned at runtime. Default false.
bCableAllowUnpinningboolWhether pins can be removed from spawned cables at runtime. Default true.
Cable Defaults | End Caps
CableEndCapMeshStatic MeshMesh for cable endpoints (connector/plug).
CableEndCapMaterialMaterialMaterial for end cap meshes.
CableEndCapScaleVectorScale of end cap meshes. Default (1,1,1).
CableEndCapRotationOffsetRotatorRotation offset on top of auto-orientation for end caps. Default (0,0,0). Advanced
CableSealCapMeshStatic MeshMesh to seal hollow cable ends at free/cut endpoints. Advanced
CableSealCapMaterialMaterialMaterial for seal cap meshes. Advanced
CableSealCapInsetfloatHow far seal caps are pushed into the cable end (world units). Default 5.0. Advanced
Cable Defaults | Cutting
bCableAllowCuttingboolWhether spawned cables can be cut at runtime. Default false.
CableCutImpulseStrengthfloatRandom velocity injected into particles when cable is cut. Default 10.0.
CableMinCutParticlesIntegerMinimum particles per piece after cutting. Default 3. Advanced
CableCutOffMaterialMaterialMaterial applied to the cut-off tail cable.
CablePostCutMaterialMaterialMaterial the remaining (head) cable switches to after being cut.
bCableAutoDestroyCutPiecesboolAutomatically destroy cut-off cable pieces after a delay. Default false.
CableAutoDestroyDelayfloatSeconds before a cut-off piece is destroyed. Default 5.0.
bCableOnlyDestroyUnattachedboolOnly auto-destroy cut pieces where neither end is attached. Default true. Advanced
Cable Defaults | Regrow
bCableRegrowAfterCutboolRegrow the cable back to its original length after being cut. Default false.
CableRegrowSpeedfloatHow fast the cable regrows (world units/sec). Default 200.
CableRegrowDelayfloatSeconds to wait before regrowing starts after a cut. Default 1.0.
Cable Defaults | Rideable
bCableRideableboolWhether spawned cables are rideable (zipline). Default false.
CableRideSpeedfloatBase travel speed along the cable (cm/s). Default 800.
CableRideHangDistancefloatHow far below the cable the rider hangs (cm). Default 350.
Cable Defaults | LOD Details
CableNumOverlapCapsulesIntegerNumber of overlap capsules placed along each cable for spatial queries. Default 4. Advanced
CableLODMediumDistancefloatDistance for Medium LOD tier (0 = auto from sleep distance). Default 0. Advanced
CableLODLowDistancefloatDistance for Low LOD tier (0 = auto from sleep distance). Default 0. Advanced
CableLODMediumVisualSegmentsIntegerVisual segments at Medium LOD (0 = auto). Default 0. Advanced
CableLODLowVisualSegmentsIntegerVisual segments at Low LOD (0 = auto). Default 0. Advanced
bCableHideVisualsAtLowboolHide cable visuals entirely at Low LOD tier. Default true. Advanced
bCableDisableShadowsAtLowLODboolDisable shadow casting at Low and Sleeping LOD tiers. Default true. Advanced
Functions
Create a cable to another point. Returns null if already connected.
Destroy all cables, clear SpawnedCables.
DestroyAllCables + remove from other ends' Connections + empty own Connections.
Check if connected to another point.
First cable (convenience for single-connection use).
Pulley Component RAC Pulley
Cable Actor only - Uses particle pinning. Does not work with Wrapping Cables.
Place on any actor to create a pulley or guide point. Auto-detects cables within range at BeginPlay and pins the nearest particle on each cable.
Pulley
DetectionRadiusfloatRange to detect cables at BeginPlay. Default 500.
ManualCablesCable Actor ArraySpecific cables to pin (optional). When empty, auto-detects all cables within DetectionRadius. When set, only these cables are pinned (still must be within DetectionRadius).
bFollowParentboolPin follows parent actor movement. Default true.
PinnedCableCountIntegerNumber of cables currently pinned. Read-Only
Functions
Re-scan for cables spawned after BeginPlay.
Release all pinned cables.
Get all cable components (Verlet Cable Component) currently pinned by this pulley.
Cable Debug Component RAC Cable Debug
Runtime debug visualization for the cable system. Drop it on any actor in your level (PlayerController, GameState, etc.), or just use the RAC.Debug.* console commands and one will be created automatically. All features off by default. Toggle what you need in the Details panel or via console.
Performance Visualization
LOD Heatmap
bDrawLODHeatmapboolColor ALL cables by LOD tier: Green = Full, Yellow = Medium, Orange = Low, Red = Sleeping. Default false.
HeatmapLineThicknessfloatThickness of heatmap debug lines. Default 3.
Tension Heatmap
bDrawTensionHeatmapboolColor ALL cables by tension: Blue = slack, White = neutral, Red = taut. Takes priority over LOD heatmap when both are on. Default false.
Pin Markers
bDrawPinMarkersboolDraw spheres at all runtime pin locations on every cable. Default false.
PinMarkerSizefloatRadius of pin marker spheres. Default 8.
Distance Rings
bDrawDistanceRingsboolDraw circles around each cable's midpoint at its LOD distance thresholds. Shows where tier transitions happen in world space. Default false.
RingSegmentsIntegerLine segments per distance ring (higher = smoother). Default 48.
Stats HUD
bDrawStatsHUDboolShow a Slate overlay panel (top-right corner) with cable counts per LOD tier, budget usage, parallel solver status, particle/iteration totals, tension, and cuttable/grabbable counts. Default false.
Per-Cable Labels
bDrawPerCableLabelsboolShow floating text above each cable with distance, LOD tier, solver iterations, tension, and length. Default false.
LabelTextScalefloatText size for per-cable labels. Default 1.
DebugLabelMaxDistancefloatMax camera distance for per-cable labels to be drawn. 0 = unlimited. Default 5000.
Wind Debug
bDrawWindDebugboolDraw wind direction arrows at each cable's midpoint when bUseWorldWind is enabled. Arrow length indicates force strength. Also adds wind info to per-cable labels and stats HUD. Default false.
Force LOD Override
bForceLODOverrideboolForce ALL cables to the specified LOD tier (bypasses distance and budget). Default false.
ForcedLODTierERACCableLODThe LOD tier to force when bForceLODOverride is true.
Interaction Visualization
Interaction Debug
bDrawInteractionZonesboolShow detection zones for all CableInteractionComponents. Proximity: sphere wireframe. Aim: ray line with radius cone. Default false.
bDrawGrabStateboolShow active grab: grab point marker, drag line from player, grabbed particle highlight. Default false.
bDrawCableFlagsboolShow per-cable permission flags (bAllowCutting, bAllowGrabbing, bAllowPinning) near each cable's start. Default false.
bDrawOverlapCapsulesboolMake the interaction overlap capsules visible on all Cable actors. Default false.
bDrawCutPreviewboolShow where a cut would happen on the nearest/aimed cable (requires a CableInteractionComponent). Default false.
General
DebugUpdateIntervalfloatHow often debug shapes are redrawn (seconds). 0 = every frame. Default 0.25.
Functions
Force all cables to a specific LOD tier. Useful for testing worst-case or best-case performance.
Release the forced LOD override, returning all cables to normal distance/budget-based LOD.
Get the number of cables currently at a specific LOD tier.
Total number of active particles across all cables. Useful for performance monitoring.
Console Commands
All debug features can also be toggled from the console. Type any command below - a debug component is auto-created if none exists in the level.
Toggle Commands
RAC.Debug.HUDconsoleToggle the stats HUD panel.
RAC.Debug.LODHeatmapconsoleToggle LOD tier heatmap on cables.
RAC.Debug.TensionHeatmapconsoleToggle tension heatmap on cables.
RAC.Debug.PinMarkersconsoleToggle pin location markers.
RAC.Debug.DistanceRingsconsoleToggle LOD distance rings.
RAC.Debug.LabelsconsoleToggle per-cable floating labels.
RAC.Debug.InteractionZonesconsoleToggle interaction zone visualization.
RAC.Debug.GrabStateconsoleToggle grab state visualization.
RAC.Debug.CableFlagsconsoleToggle per-cable capability flags.
RAC.Debug.CapsulesconsoleToggle overlap capsule visualization.
RAC.Debug.CutPreviewconsoleToggle cut preview visualization.
RAC.Debug.WindconsoleToggle wind direction debug arrows.
Force LOD
RAC.Debug.ForceLOD FullconsoleForce all cables to Full LOD tier.
RAC.Debug.ForceLOD MediumconsoleForce all cables to Medium LOD tier.
RAC.Debug.ForceLOD LowconsoleForce all cables to Low LOD tier.
RAC.Debug.ForceLOD SleepingconsoleForce all cables to Sleeping LOD tier.
RAC.Debug.ForceLOD OffconsoleRelease forced LOD override.
Performance Profiling
Type stat RAC in the console to see per-frame cycle timing for the cable system. This uses Unreal's built-in stat profiler, same as stat Physics or stat Particles.
Tracked Stats
VerletCable TickcycleTotal tick time across all cables (includes all phases below).
PrepareSolvecycleLOD evaluation, budget assignment, pin enforcement, substep calculation.
RunSolvecycleThe Verlet constraint solver - the most expensive phase. Runs in parallel when enabled.
PostSolvecycleEvents, physics endpoint coupling, rigid endpoints, visual updates.
DetectCollisionscycleWorld collision traces (sphere traces per particle).
UpdateVisualscycleSpline mesh position/tangent updates.
Tendrils RAC Tether Utils
Cable Actor only - Spawns Verlet Cables internally.
Surface-crawling VFX cables that spread around objects using attract forces, collision, and drift. Three modes based on target size: wrap (small objects), terrain contour (large surfaces), flat contour (no target). Functions live in the Tether Utils Blueprint function library.
Spawn tendrils at a hit point. TendrilWiggle 0-1 controls calm drift to energetic writhing. High Quality Visuals = one spline mesh per sim segment (smooth but heavy), false = capped at 4 segments (fast, good for rapid spawning). Most params have sensible defaults (0 = auto).
Update tendril origin each tick while firing. Recomputes endpoints with smooth lerping.
Hide visuals and destroy all tendril components. Empties the array.
Destroy ALL tendrils in the world.
Tip
Typical usage: On hit → SpawnTendrils (once). Each tick while firing → UpdateTendrilsOrigin. On release → DestroyTendrils.
Tether Utils RAC Tether Utils
Cable Actor only - All functions operate on Verlet Cables / Cable Actors.
Blueprint function library for spatial queries and cable spawning.
Spatial Queries
Returns true if the actor is a Cable Actor or Wrapping Cable. Useful for checking line trace hits against cable actors.
Find the nearest Cable to a world position.
Find closest point on a polyline defined by points.
Find first Cable Point component on an actor.
Spawn a cable between two actors at runtime. CableLength 0 = auto from distance with 20% slack. NumSegments 0 = auto-calculate. If EndActor is null, EndOffset is treated as an absolute world position. Returns the spawned Cable Actor.
One-shot convenience: spawn a cable with physics coupling pre-configured between two actors. Stiffness 8000, Damping 50 defaults. CableLength 0 = auto from distance * SlackMultiplier. SleepDistance forced to 0. For lifecycle management (break detection, events), use the Tow Component instead.
Niagara
Manual per-tick cable-to-Niagara feed for full control. Sets SourceCable on the NDI and NumPoints on the Niagara component. Use when you need custom timing or multiple cables feeding one system. For automatic feeding, use bFeedNiagara on the cable instead.
Cable Web Utils RAC Cable Web Utils
Cable Actor only - Works with Cable Points, which spawn Cable Actors.
Blueprint function library for editor-time cable web generation.
Max Connections Per Actor
Min Angle Between Connections
Auto-wire actors by proximity and angle constraints. Only writes to Connections arrays (cables spawn at BeginPlay). Returns number of connections made.
Clear all Connections arrays on the given actors. Returns number cleared.
Note
Both functions call Modify() for undo support in the editor.
Structs & Enums
Cable Pin
Pin data for a pinned particle.
Fields
PinLocationVectorWorld-space pin location.
PinToActorActor ReferenceOptional actor attachment (pin follows it).
PinSocketNameOptional socket on the actor.
PinOffsetVectorOffset from actor/socket.
Cable LOD
| Value | Solver | Visuals | Collision |
| Full | Full iterations + substeps | Every frame | Active |
| Medium | Half iterations, 1 substep | ~30 fps | Active |
| Low | 2 iterations, 1 substep | ~10 fps | Disabled |
| Sleeping | Frozen (or SleepSolverIterations) | Hidden | Disabled |
Detection Mode
How the Cable Interaction Component finds cables. Set via DetectionMode on the component.
| Value | How it works | Best for | Key settings |
| Proximity | Finds the nearest cable whose overlap capsule overlaps the player | Top-down, isometric, VR | InteractionRadius, MaxSlideSpeed |
| Aim | Traces a ray from the camera crosshair to find the aimed cable | First-person, third-person | AimDistance, AimRadius, bTraceFromCamera |
Tether Target Type
What the Tether Component is currently connected to. Read from TetherTargetType (BlueprintReadOnly).
| Value | Description | Connected via |
| None | Not connected to anything | Initial state, or after Detach() |
| Cable | Connected to a Cable Actor - attach point tracks nearest point on cable | TetherToCable(Cable) |
| WrappingCable | Connected to a Wrapping Cable - attach point tracks nearest point on wrapping cable | TetherToWrappingCable(Cable) |
| Actor | Connected to an actor - attach point follows actor/socket/offset | TetherToActor(Actor, Socket, Offset) |
| Point | Connected to a fixed world position | TetherToPoint(WorldPos) |
FAQ
Which class do I need?
Start with what you want to build. Click a name to jump to its docs.
Level Design
Simple rope or cable between two points - Cable Actor
Cable that wraps around corners and geometry - Wrapping Cable
Zipline - Zipline Cable
Procedural web of cables - Cable Web Utils
Auto-connect cables between actors - Cable Point
Player Abilities
Grapple hook / swing - Swing Component
Pull objects toward you - Pull Component
Climb up/down a rope - Climb Component
Visible rope to a target (leash, lasso) - Tether Component
Grab, pin, or cut cables at runtime - Cable Interaction
Vehicles
Tow another actor with a cable - Tow Component + Tow Target
World Building
Anchor point for tethers (hook, ring) - Tether Point
Pulley or guide that redirects cables - Pulley Component
VFX / Advanced
Feed cable data to Niagara - Cable Niagara DI
Spawn cables from code at runtime - Tether Utils
What's the difference between Cable Actor and Wrapping Cable?
They are separate systems with a large shared feature set. Both support cutting, tethering + sliding, zipline riding, climbing, extend/retract, drift/wind, attract point, Niagara integration, collision, tension materials, overlap capsules, end caps, seal caps, LOD, and active state. The Cable Actor uses a Verlet particle solver and additionally supports beam effects, runtime pinning, Cable Points, Pulley, Cable Web, and auto extend/retract (tension-based). The Wrapping Cable uses a section-based solver that dynamically wraps around world geometry with wrap anchors. See the feature support table for the full breakdown.
How do I filter the Details panel to only show RAC properties?
When you select any RAC actor or component, the Details panel shows an RAC filter button in the top toolbar (alongside General, Actor, Physics, etc.). Click it to show only RAC-specific categories and hide the standard engine properties.
How many cables can I have?
Hundreds, depending on LOD settings and hardware. The LOD system, parallel solving, collision round-robin, and global cable budget keep performance in check. Sleeping cables skip simulation entirely.
Does it work with multiplayer?
Cables are client-side visual/physics. Replicate the endpoint positions and let each client simulate locally.
Do I need C++?
No. Everything is exposed to Blueprints. All functions, properties, and events are accessible from the BP editor.
Can cables collide with the world?
Yes. Enable bEnableCollision on the Verlet component. Use MaxTracesPerFrame to control performance. Use MaxTracesPerFrame = 0 for precise draping on key cables (traces every particle every frame).
How do pins work?
Pins act as pulleys. The rope slides through them so tension equalizes across sections. The solver distributes cable length proportionally to each section's span distance between pin boundaries.
How do I use the active/inactive state on cables?
The Cable Actor has bCableActive + OnCableActivated/OnCableDeactivated events built in. It's a pure gameplay flag; the cable keeps simulating regardless. Your BP decides what happens (swap materials, trigger effects, etc.).
What's the difference between Tether Component and Cable Interaction?
The Tether Component creates a visual rope to any target (cable, wrapping cable, actor, or point). Call TetherToCable/TetherToWrappingCable/TetherToActor/TetherToPoint to connect explicitly. The Cable Interaction Component is for player-driven cable manipulation: grab, pin, cut, and drag cables. Set DetectionMode to Proximity (overlap) or Aim (crosshair). They complement each other.
How does the zipline work?
Use Zipline Cable (a Cable Actor with ride physics pre-enabled). Call StartRiding(Character) on it and the player rides along the cable polyline with gravity, deceleration, and spring-based tracking. Tick disabled when idle.
How do I make a beam or laser?
Use Verlet Cable Component directly (no Cable Actor needed). Enable bAutoLength so the cable stays taut between endpoints, enable bEnableVisuals for built-in spline mesh rendering, and use BeamNoiseAmplitude/BeamNoiseSpeed for wobble. Add VisualEndFlare for an impact bloom. The cable automatically tracks endpoint distance every tick.
How do I set up a cable web?
Place actors with Cable Point Components. Enable bAutoConnectNearby and set the CableChannel so only same-channel points connect. For editor-time batch setup, use GenerateCableWeb from the Cable Web Utils library. Mark one point as Cable Parent and configure Cable Defaults there. The BFS flood-fill pushes settings to the entire connected network.
How do I cut a cable at runtime?
On the Verlet Cable Component, set bAllowCutting = true, then call CutAtParticle(Index). On a Cable Actor, use CutCableAtWorldPosition(Location) for convenience. It finds the nearest particle, splits the cable, and spawns a new Cable Actor for the tail piece. The Cable Interaction Component also has CutNearestCable() for player-driven cutting. Enable bAutoDestroyCutPieces to clean up cut-off pieces automatically, or bRegrowAfterCut to grow the cable back to full length over time.
How do I make cables pull or push physics objects?
Enable bDriveStartPhysics or bDriveEndPhysics on the Verlet Cable Component. Tune EndpointPhysicsStiffness (default 5000) and EndpointPhysicsDamping. The cable applies spring forces to attached physics bodies when taut. Only pulls, never pushes, and force is clamped to prevent instability.
What's the difference between the Verlet Cable Component and the Cable Actor?
The Verlet Cable Component is the physics solver: particles, constraints, and optional built-in beam visuals. The Cable Actor wraps it with spline mesh visuals (parallel transport), overlap capsules, end caps, pin indicator meshes, distance-based thickness, cutting with spawn, and gameplay active state. Use the component directly for beams/lasers/tendrils. Use the actor for full-featured cables.
How do I make cables drape over terrain?
Enable bEnableCollision and set a reasonable CollisionRadius. For precise draping, set MaxTracesPerFrame = 0 to trace all particles every frame (expensive, use sparingly). The attract system also works: set AttractPoint to a ground position with AttractStrength to pull the cable downward, and enable bSurfaceCrawl so drift/attract forces project onto surfaces.
How do tendrils work?
Call SpawnTendrils from the Tether Utils library. It spawns multiple Verlet cables that fan out from an origin, each with attract/drift/surface crawl for organic spreading. Three modes emerge from the parameters: small/medium wrapping around a target actor, large terrain-following contours, or flat spreading with no target. Update their origin each tick with UpdateTendrilsOrigin. Clean up with DestroyTendrils.
How does the LOD system work?
Enable bEnableLODTiers and set SleepDistance. Cables automatically transition through four tiers based on camera distance: Full (all iterations + substeps), Medium (half iterations, ~30fps visuals), Low (2 iterations, ~10fps visuals, no collision), Sleeping (frozen or minimal iterations, hidden). Use the global budget (SetCableBudget) to cap how many cables run at Full/Medium simultaneously.
Can I slide along cables?
Yes, two ways. The Cable Actor ride system (see bRideable and Zipline Cable) provides full zipline-style sliding. The Cable Interaction Component also supports sliding in Proximity mode when bDragWithPlayer is enabled; the grab point follows the player along the cable. The Tether Component also supports sliding along cables via SlideTetherAlongCable.
How do I make the player pull back like a bungee cord?
On the Tether Component, enable bApplyTensionToMovement. Set TetherLeashLength for how far the player can walk before the pull kicks in. TensionForceMultiplier controls strength (~2 gentle, ~10 strong, ~20+ hard yank), and TensionDamping prevents spring oscillation. The force goes through the character's CharacterMovementComponent, so it respects movement mode and friction.
Can I use my own mesh and material?
Yes. On Cable Actor, set CableMesh and CableMaterial. For flow effects, your material needs two scalar parameters: UVOffset (scrolls automatically) and UVScale (set per segment for continuous UVs). The plugin creates Dynamic Material Instances per segment so each one gets correct UV values. End caps and pin meshes also support custom meshes and materials.
How do I change the cable's polygon count / face count?
RAC uses Spline Mesh Components with a user-supplied static mesh, so the cross-section shape is determined entirely by the mesh asset you assign to CableMesh (on Cable Actor) or VisualMesh (on Verlet Cable Component). Swap in a low-poly cylinder for a faceted look, a high-poly cylinder for smooth rounds, or any custom cross-section shape you like (hexagonal, flat ribbon, braided, etc.). There is no NumSides parameter because you already have full control through the mesh itself.
What are Cable Points good for?
Cable Points are connection endpoints. Place them on actors, and they auto-connect to nearby Cable Points at BeginPlay to spawn cables between them. The Cable Parent system lets you mark one point as the parent. Its Cable Defaults (mesh, material, physics, LOD) flow to every cable in the connected graph via BFS. Override individual points with bOverrideCableDefaults.
How does the Pulley Component work?
Add a Pulley Component to any actor. It auto-detects cables within DetectionRadius and pins them at the pulley location. Cables slide through the pin like a real pulley. Enable bFollowParent so the pin point moves with the actor. Use ManualCables to pin specific cables instead of auto-detecting.
How do I detect which cable the player is looking at?
Add a Cable Interaction Component to your character and set DetectionMode = Aim. Each tick it traces from the camera and updates NearestCable, NearestPoint, NearestParticleIndex, and NearestDistance. Call GetDetectedCable() for a clean query, or bind OnCableInRange / OnCableOutOfRange events to show/hide a crosshair highlight. AimRadius controls forgiveness (how far off-center still counts as aimed).
How do I make cables react to explosions or impacts?
Use InjectVelocity(Vector) on the Verlet Cable Component to push all particles in a direction (good for blast waves), or InjectRandomBurst(float Strength) for a chaotic startle effect (each particle gets a random push). Both only affect interior particles - endpoints stay attached. The cable's damping brings it back to rest.
Can I change cable properties at runtime?
Yes. Every property on every RAC class is BlueprintReadWrite. Change CableLength, GravityScale, CableMaterial, bEnableCollision, or anything else from Blueprint at any time. Changes take effect on the next tick. Some properties (like NumSegments) require ResetSimulation() to re-initialize the particle chain.
How do I set up a wrapping cable?
Place an Wrapping Cable actor and set AttachStartTo / AttachEndTo to your anchor actors. The cable automatically wraps around geometry between them. Tune MaxWrapAnchors for wrap complexity, WrapStickiness for how aggressively anchors hold, and WrapCollisionChannel to match your geometry. For player interaction, the Cable Interaction Component can detect and grab wrapping cables. For pull-back on taut cables, enable bPullBackWhenTaut.
Can I package a Blueprint-only project with RAC?
Yes. UE requires at least one C++ class in the project for monolithic builds with C++ plugins. Tools > New C++ Class > None (Empty Class) > Create. See the Troubleshooting section for the full walkthrough. Engine-wide limitation, not specific to RAC.
Troubleshooting
Packaging fails in a Blueprint-only project
BP-only projects have no Source folder, so UBT cannot compile C++ plugins into the executable. This affects every C++ plugin, not just RAC.
Fix:
- Tools > New C++ Class
- Select None (Empty Class)
- Name it anything (e.g.
MyGameModule)
- Click Create Class, let the editor compile
- Package again
This adds a Source folder to your project so UBT can compile and link RAC into the build.
Cable visuals don't appear at runtime
- Cable Actor: Visuals are automatic. Check
CableMesh is set (null = engine cylinder, custom mesh must be valid).
- Standalone Verlet Cable Component: Enable
bEnableVisuals and set VisualMesh. Off by default on the raw component.
- Check if
SetVisualsVisible(false) was called in your Blueprint logic.
Cable falls through the floor
- Enable
bEnableCollision (off by default).
- Set
CollisionChannel to match your floor (default WorldStatic).
- For fast-moving cables, enable
bSegmentCollision or bHighFidelityCollision.
- Increase
CollisionRadius for very thin meshes.
Cutting doesn't work
bAllowCutting must be true (off by default).
- For Cable Actor cutting, use
CutCableAtParticle/CutCableAtWorldPosition on the Cable Actor, not CutAtParticle on the Verlet component.
MinCutParticles (default 3) silently rejects cuts that would leave either piece too small.
- Via Cable Interaction Component: use
CutNearestCable or CutCableAtPosition.
Tether doesn't connect to target
- The Tether Component does not auto-connect. You must call
TetherToCable(), TetherToWrappingCable(), TetherToActor(), or TetherToPoint() explicitly.
- When tethering to a Cable Actor, the cable's
OverlapCapsuleRadius must be large enough for detection (default 500).
- Check that the target actor/cable is valid and not pending destroy.
Wrapping Cable doesn't wrap around geometry
bEnableWrapping must be true (default).
- Geometry must respond to
WrapCollisionChannel (default Visibility).
- If wrapping stops, check
MaxWrapAnchors (default 8) - complex geometry exhausts the budget.
- Floor surfaces only wrap when
bWrapOnTopSurfaces is true (default).
Wrapping Cable stretches past max anchors
- By default,
bFreezeAtMaxAnchors locks the grab point and endpoints in place when the budget is hit. If the cable still appears to stretch, the player may be dragging before the anchor limit triggers.
- Switch to
bPullBackAtMaxAnchors instead - it applies a spring force pulling the player back. Tune PullBackStiffness (15 = firm) and PullBackDamping (8 = smooth).
- Increase
MaxWrapAnchors if the geometry legitimately needs more anchors.
Wrapping Cable grab not working
bGrabbable must be true (default) on the wrapping cable.
- The Cable Interaction Component must detect the wrapping cable first - check
OverlapCapsuleRadius on the wrapping cable (default 500) and the interaction component's detection range.
- Call
GetDetectedWrappingCable() to verify detection before grabbing.
- If the grab succeeds but the cable snaps back instantly, check
bClampGrabToLength - when true, the grab point cannot exceed the cable's rope length.
Known Limitations
Multiplayer
No built-in replicationCables are client-side physics and visuals, not replicated. To sync in multiplayer, replicate endpoint positions and pin/cut state via gameplay RPCs and let each client simulate locally.
Packaging
Blueprint-only projectsRequire adding one empty C++ class before packaging. Standard UE requirement for all C++ plugins. See Troubleshooting.
Platform Support
Windows (Win64)Primary development and testing platform. Fully supported.
macOS / LinuxUntested. No platform-specific code, but not verified on Mac or Linux builds.
ConsolesUntested. No platform-specific code, but not verified on console builds.
Changelog
v1.0 Latest
- Initial Fab release
- 7 components: Verlet Cable, Cable Actor, Tether, Cable Point, Cable Interaction, Pulley, Swing
- 4 actors: Cable Actor, Wrapping Cable, Zipline Cable, Tether Point
- 2 Blueprint function libraries: Tether Utils, Cable Web Utils
- Verlet physics solver with drift, attract, surface crawl, adhesion
- 4-tier LOD system with global cable budget
- Runtime pinning with pulley behavior
- Auto extend/retract and manual extend/retract
- Physics coupling (two-way cable-to-rigidbody forces)
- Parallel cable solving across CPU cores
- Collision round-robin with configurable traces-per-frame budget
- Tendrils VFX system
- Beam/laser mode with taper, flare, and noise
- Cable webs with Cable Parent system
- Flow materials with per-segment DMIs
- Distance-based thickness scaling
- Connect/disconnect visual animations on Tether Component
- Zipline ride system with gravity influence and auto-tether
- Movement force system on Tether Component (spring/bungee player pull)
- Wrapping Cable actor: geometry-aware cable that dynamically wraps around world geometry under tension
- Tension material parameter drive with remap (bDriveMaterialTension) on Cable Actor, Verlet Cable Component, and Wrapping Cable
- Cable Interaction Component now detects and supports grabbing Wrapping Cables
Example Projects
Download a pre-built demo project with example levels showcasing all RAC features. These projects do not include the plugin - you must install the RAC plugin from Fab first, then open the project.
Example Projects (by Engine Version)
Built Demo (Playable, no UE required)
Standalone Windows build. Run to explore all demo stations without installing Unreal Engine.