On this page
Scripting

Steering Wheels

This page covers driving RCC with a racing wheel: the shipped Logitech G920 bindings, adding bindings for any other wheel, tuning steering feel, and wiring an H-pattern shifter.

Quick Start

Logitech G920: the bindings ship in RCC's input asset. Plug the wheel in and press Play in any demo scene.

Any other wheel (G29, G923, Thrustmaster…) reports a different device name, so the G920 bindings do not match it. Add your own:

  1. Plug in the wheel. Open Window → Analysis → Input Debugger and check that the wheel is listed.
  2. Double-click Assets/RealisticCarControllerV4/Resources/RCC_InputActions.inputactions.
  3. In the Vehicle map, select Steering → + → Add Binding.
  4. Click the binding's Path field → Listen, then turn the wheel. Pick the control that appears.
  5. Repeat for Throttle and Brake (press each pedal while listening).
  6. Click Save Asset and press Play.

If a pedal or the steering works backwards, see Tuning.

Shipped G920 bindings

The input asset has a G920 control scheme. All bindings below use the device <HID::Logitech G920 Driving Force Racing Wheel for Xbox One>, except Throttle, which uses the generic <Joystick> device.

The shipped G920 bindings at a glance: wheel and pedals, buttons, and D-pad. The shifter buttons are bound but RCC doesn't read them.
Map Action G920 control Processors / notes
Vehicle Throttle Composite G29/920 (1D Axis, Min Value 0): negative <Joystick>/stick/down, positive <Joystick>/stick/up —
Vehicle Brake Composite G29/920 (1D Axis, Min Value 0): negative z, positive unbound Scale (factor 2) on the composite
Vehicle Steering stick/x Scale (factor 1)
Vehicle Clutch rz Normalize (min 1, max -1, zero 1)
Vehicle Handbrake button2 —
Vehicle Start/Stop Engine button7 —
Vehicle Low Beam Lights button10 —
Vehicle High Beam Lights button9 —
Vehicle Indicator Left / Right hat/left / hat/right —
Vehicle Indicator Hazard hat/up —
Vehicle Gear Shift Up / Down button5 / button6 —
Vehicle NOS Composite (1D Axis, Min Value 0): positive trigger —
Vehicle N Gear Binding in the G920 scheme with an empty path Not bound
Vehicle 1stGear – 6thGear button13 – button18 Not read by RCC — see H-pattern shifter
Vehicle RGear button12 Not read by RCC
Camera Change Camera button8 —
Camera Look Back hat/down —

Interior Lights, Trailer Detach, Orbit, Zoom and the Optional map have no G920 binding. Keyboard and gamepad bindings are in Input System.

RCC does not filter bindings by control scheme: keyboard, gamepad and wheel bindings are all active at once.

Adding bindings for another wheel

The six steps to bind a new wheel, and the values RCC expects from each axis.
  1. With the wheel plugged in, open Window → Analysis → Input Debugger and double-click the wheel. Turn the wheel and press each pedal to see which control changes.
  2. Open Resources/RCC_InputActions.inputactions and add a binding per action (Quick Start steps 3–5). RCC reads these actions from the wheel:
Action Expected value
Steering -1 (full left) to 1 (full right)
Throttle 0 released, 1 fully pressed
Brake 0 released, 1 fully pressed
Clutch 0 released, 1 fully pressed (used only when Automatic Clutch is off)
Handbrake, NOS 0 released, 1 pressed
  1. Bind buttons to the button actions (Start/Stop Engine, lights, Gear Shift Up / Down, Change Camera…) the same way.
  2. If a pedal reads 1 when released, add an Invert or Normalize processor to its binding and check the value again in the Input Debugger.
  3. Click Save Asset. Saving also regenerates Scripts/Inputs/RCC_InputActions.cs, the C# class RCC reads the actions through.

Updating RCC replaces RCC_InputActions.inputactions and RCC_InputActions.cs. Note your bindings and re-apply them after an update.

Tuning

How a wheel turn becomes a steer angle: the vendor software's rotation range, the Steering action (−1 to 1), the steering helpers, then the Steer Angle Curve's maximum angle at the current speed.

Steering range. RCC maps full steering input (-1 or 1) to the vehicle's current maximum steer angle. On a wheel with a large rotation range, a small turn gives very little steering. Set a smaller rotation range in the wheel maker's software, and keep the Steering binding's Scale at 1.

Steer angle. The maximum steer angle comes from Steer Angle Curve (vehicle inspector → Steering tab, when Steering Type is Curve). A freshly added controller's curve is 40° at 0 km/h, 10° at 120 km/h and 7° at 200 km/h. Raise the curve for more steering at speed.

The default Steer Angle Curve, used by a freshly added controller and every demo vehicle except the two Skylines: full steering input gives 40° when standing still, 10° at 120 km/h and 7° from 200 km/h.

Steering helpers. Use Steering Sensitivity limits how fast the steering follows your input, and Use Counter Steering adds steering while drifting. Turn both off (Steering tab) if the car should follow the wheel exactly. When the global behavior preset is on, it overwrites these and the Steer Angle Curve; tick Ignore Global Behavior Preset on the vehicle to keep your values (Behavior Presets).

The Steering tab of the Muscle vehicle: Steering Type, Steer Angle Curve, Use Counter Steering and Use Steering Sensitivity.

Reversed axis. Add an Invert processor to the binding.

Center dead zone. Add an Axis Deadzone processor to the Steering binding and raise Min until the car stops steering with the wheel centered.

Clutch pedal. The vehicle reads the Clutch action only when Automatic Clutch is off (vehicle inspector → Engine & Gears tab).

H-pattern shifter

The input asset has 1stGear – 6thGear and RGear actions (bound to G920 button13–button18 and button12), but RCC does not read them, so the shifter does nothing out of the box. Add this script to any GameObject in the scene to connect them to the player vehicle:

C#
using UnityEngine;

/// <summary>
/// Connects the 1stGear - 6thGear and RGear input actions (H-pattern shifter) to the player vehicle.
/// </summary>
public class RCC_HShifterExample : MonoBehaviour {

    private RCC_InputActions inputActions;

    private void Awake() {

        inputActions = new RCC_InputActions();

        // Gear indexes are 0-based: 1st gear = 0. Reverse = -1.
        inputActions.Vehicle._1stGear.performed += context => ShiftTo(0);
        inputActions.Vehicle._2ndGear.performed += context => ShiftTo(1);
        inputActions.Vehicle._3rdGear.performed += context => ShiftTo(2);
        inputActions.Vehicle._4thGear.performed += context => ShiftTo(3);
        inputActions.Vehicle._5thGear.performed += context => ShiftTo(4);
        inputActions.Vehicle._6thGear.performed += context => ShiftTo(5);
        inputActions.Vehicle.RGear.performed += context => ShiftTo(-1);

    }

    private void OnEnable() {

        inputActions.Vehicle.Enable();

    }

    private void OnDisable() {

        inputActions.Vehicle.Disable();

    }

    private void OnDestroy() {

        inputActions.Dispose();

    }

    private void ShiftTo(int gear) {

        RCC_CarControllerV4 vehicle = RCC_SceneManager.Instance.activePlayerVehicle;

        if (!vehicle || !vehicle.canControl || vehicle.externalController)
            return;

        // The automatic gearbox would shift away from the selected gear.
        vehicle.automaticGear = false;

        // In reverse, GearShiftTo(0) is ignored (reverse also uses gear index 0). GearShiftUp() goes from reverse to 1st.
        if (gear == 0 && vehicle.direction == -1)
            vehicle.GearShiftUp();
        else
            vehicle.GearShiftTo(gear);

    }

}
  • GearShiftTo(int) ignores gears the vehicle doesn't have (6th on a 5-speed does nothing).
  • The first shift turns off Automatic Gearbox. With it off, the brake no longer engages reverse: select R to reverse.
  • Moving the lever back to the middle keeps the last gear engaged.
  • For another shifter, bind its buttons to the same actions.

See Also

BoneCracker Games · Realistic Car ControllerBack to top ↑
Document details

Generated from: 25_SteeringWheels.md
Date: 2026-09-24 01:26
© 2014 - 2026 BoneCracker Games — Realistic Car Controller V6.0.0