--- generated_by: gdlink-build generated_at: 2026-09-05T21:52:52Z do_not_edit: true title: XR Slider brick_type: executor tier: Pro generated: true --- # XR Slider **Category:** Executor **Tier:** Pro ## Purpose A grabbable slider control for in-world XR panels. ## Runtime Behavior **Host** `Node3D` (in practice the handle mesh/body). The handle's **parent** defines the track: the parent's local **+Y** is the travel axis, and the handle's authored local X/Z are preserved, so the track can be moved or rotated with its panel and the control follows. **Inputs** None. The brick polls its configured hand each physics tick; it requires no Listener or Gate wiring. > **Why no Listener/Gate**: an earlier attempt routed slider input through the shared XR grab > gate (switching it `AND` → `OR` and adding trigger listeners). That stopped the grab > executor dispatching entirely — the grab listener still fired but no executor ran. Slider > input is therefore deliberately kept off that pipeline. **Properties** - **variable** (Variable Name, default `""`): Variable that receives the slider's value. This is what the control actually drives. Empty = the control moves but publishes nothing. - **scope** (Enum, default `"Global"`): `Global`, `Local`. Where the value is written. - **value_min** (Float, default `0.0`): Value published at the bottom of travel. - **value_max** (Float, default `1.0`): Value published at the top of travel. - **travel** (Float, default `0.12`): Half-length of the track in metres. The handle slides ± this along the parent's local Y. - **ease** (Float, default `0.5`): Smoothing applied to the handle. `1.0` follows the pointer exactly; lower values take controller tracking jitter off it without adding visible lag. - **aim_radius** (Float, default `0.12`): How close the pointer ray must pass to the handle to engage it. ... ```{raw} html