Skip to main content

Configuration

Tuning lives in MotionConfig. Start with presets — only override when a game feels jittery or throws are weak.

Presets

motion.setMode(.paddle)
// same as:
motion.config = MotionConfig.preset(for: .paddle)
ModePreset highlights
.paddleGyro Y → delta, auto-offset, paddleScreenScale 66, no reference drift
.pointerRotation accumulation, higher smoothing
.gesturePull-back / thrust thresholds, cooldown 0.45s

Common tweaks

var cfg = MotionConfig.preset(for: .gesture)
cfg.gestureThreshold = 0.30
cfg.gestureMinThrustSpeed = 0.14
cfg.inputSmoothing = 0.40
motion.config = cfg

Paddle jitter

FieldDirection
paddleMicroDeadzone↑ less micro noise
paddleRawSmoothing↑ smoother raw (more lag)
paddleSmoothRetain↑ heavier smoothing
paddleStillThreshold↑ stricter auto-calib when still

Weak throws

FieldDirection
gesturePullbackDelta↓ easier arm
gestureMinThrustSpeed↓ register slower throws
gestureThreshold↓ more sensitive

Axis mapping

motion.config.axisMapping.inputX = .gyroY
motion.config.axisMapping.invertX = false

Sources: .gyroX, .gyroY, .gyroZ, .rotation (Triki twist field).

MotionOutput / MotionDebug

After updateFrame:

let out = motion.output // x, y, didShoot, paddleAtRest
let dbg = motion.debug // rawX, relY, paddleSteer, gyroBlockIndex, …

Use debug in DEV overlays only — do not ship gameplay logic on debug fields.

Full field reference

Every property is documented inline in MotionConfig.swift. Legacy paddle fields remain for DEV UI compatibility but are unused in the current paddle model.

Gestures · MotionSDK