On this page
Systems

Input System

This page covers how player input reaches an RCC vehicle, the full default controls table, how to rebind controls, and how to read RCC's input values from your own scripts. RCC uses Unity's Input System package only.

Quick Start

Rebind a control (example: move Handbrake from Space to another key):

  1. In the Project window, double-click Assets/RealisticCarControllerV4/Resources/RCC_InputActions.inputactions.
  2. Select the Vehicle map → Handbrake action → the Space binding (for a composite, select its positive part).
  3. In Binding Properties, click the Path field → Listen, then press the new key.
  4. Click Save Asset and enter Play mode.

Updating RCC replaces this asset. Note your changes and re-apply them after an update.

The four rebinding steps, using Handbrake as the example.

How input flows

  1. Resources/RCC_InputActions.inputactions holds every action and binding.
  2. Scripts/Inputs/RCC_InputActions.cs is the C# class the Input System generates from that asset. Saving the asset regenerates it.
  3. RCC_InputManager (created automatically, hidden in the Hierarchy) creates its own new RCC_InputActions(), enables the Vehicle, Camera and Optional maps, and every Update writes the current values into RCC_InputManager.Instance.inputs. Button actions raise events.
  4. RCC_CarControllerV4 copies those values in its own Update, unless the vehicle is AI-driven, replaying, or overridden.

When Mobile Controller Enabled is on in RCC Settings, step 3 takes throttle, brake, steering, handbrake and NOS from the on-screen controls instead (see Mobile Setup).

The same pipeline as a picture: the asset, the input manager, the shared inputs object and the vehicle.

Controls

Default bindings in RCC_InputActions.inputactions. "—" means no binding.

Keyboard keys RCC uses by default, colored by what they control.
Gamepad buttons RCC uses by default (Xbox names; PlayStation equivalents in the caption).

Vehicle map

Action Keyboard / Mouse Gamepad Logitech G920
Throttle W / Up Arrow Right Trigger stick/up
Brake S / Down Arrow Left Trigger z axis
Steering A, D / Left, Right Arrow Left Stick (left / right) stick/x (wheel)
Handbrake Space South (A / Cross) button2
Start/Stop Engine I North (Y / Triangle) button7
Low Beam Lights L D-Pad Up button10
High Beam Lights K View / Select (changed in V6) button9
Interior Lights M — —
Indicator Left Q D-Pad Left hat left
Indicator Right E D-Pad Right hat right
Indicator Hazard Z D-Pad Down hat up
Gear Shift Up Shift Right Bumper (RB / R1) button5
Gear Shift Down Ctrl Left Bumper (LB / L1) button6
NOS F East (B / Circle) trigger
N Gear (hold) N — —
Trailer Detach T Right Stick Press —
1stGear – 6thGear — — button13 – button18
RGear — — button12
Clutch — — rz axis

Camera map

Action Keyboard / Mouse Gamepad Logitech G920
Change Camera C Left Stick Press button8
Look Back (hold) B West (X / Square) hat down
Orbit Drag on screen (RCC Canvas) Right Stick (new in V6) —
Zoom Mouse Scroll — —

Optional map

Action Keyboard / Mouse Gamepad Logitech G920
Slow Motion (hold) G — —
Record R — —
Replay P — —

Notes:

  • 1stGear – 6thGear and RGear exist in the asset but RCC does not read them.
  • Clutch is used only when the vehicle's Automatic Clutch is off.
  • Zoom is read into inputs.scroll, but no RCC component uses it.
  • Orbit: mouse / touch orbit goes through the Drag (Orbit) panel in RCC_Canvas. The gamepad stick orbits through the Orbit action; turn it off with Use Gamepad Orbit on the RCC Camera (Camera System).
  • The asset also contains Oculus Quest bindings.

Changed in V6: gamepad throttle and brake triggers are now linear from 0 to 1 (they never went below 50% before). High Beam moved from Left Stick Down to View / Select.

Remapping

  • Change a binding: follow the Quick Start.
  • Add a second binding: click + on the action, add a binding, set its path, Save Asset.
  • Don't rename actions or maps. The generated class uses their names (Vehicle.Throttle, …), and RCC_InputManager stops compiling if they change.
  • Runtime rebinding is not supported. RCC_InputManager keeps its action instance private, so your scripts cannot rebind it or enable / disable single maps. Edit the asset instead.
  • Old Input System versions: Tools → BoneCracker Games → Realistic Car Controller → Other → Input System Version Checker warns if the installed package is 1.11.0 or older and offers to open the Package Manager. It also runs once per editor session.

Steering feel

Steering smoothing is per vehicle, on the RCC_CarControllerV4 inspector:

Inspector label What it does Shipped default Range
Use Steering Sensitivity Moves the steering toward the input over time instead of instantly. On —
Steering Sensitivity How fast the steering follows the input. Higher = quicker. 1 0.05 – 1

On-screen button ramp-up (UI Button Sensitivity / UI Button Gravity) is covered in Mobile Setup and RCC Settings.

Reading inputs from code

RCC_InputManager.Instance.inputs holds this frame's values. It is updated in Update.

C#
using UnityEngine;

public class ThrottleMonitor : MonoBehaviour {

    private void Update() {

        RCC_InputManager manager = RCC_InputManager.Instance;

        if (manager == null)
            return;

        if (manager.inputs.throttleInput > 0.9f)
            Debug.Log("Full throttle");

    }

}

RCC_Inputs fields:

Field Meaning
throttleInput Accelerator, 0 – 1.
brakeInput Brake, 0 – 1.
steerInput Steering, -1 (left) to 1 (right).
clutchInput Clutch, 0 (engaged) to 1 (disengaged).
handbrakeInput Handbrake, 0 – 1.
boostInput NOS, 0 – 1.
gearInput Not set or read by RCC.
orbitX, orbitY Raw Orbit action value (mouse delta or right stick). RCC Camera does not read these.
scroll Raw Zoom action value (mouse wheel). Not used by RCC.
  • RCC_InputManager does not clamp these values; the vehicle clamps its own copies.
  • RCC_InputManager.Instance.GamepadOrbit is the Orbit value when it comes from a gamepad, otherwise zero.
  • Treat inputs as read-only. To drive a vehicle from your own values, use Override Inputs.

Input events

Button actions (engine, lights, indicators, gears, N Gear, trailer detach, camera, look back, slow motion, record / replay) raise static events on RCC_Events, such as OnGearShiftUp. The full list with handler signatures and the subscribe pattern is in Events System.

Stopping input

Goal Do this
One vehicle ignores the player carController.SetCanControl(false); Throttle, brake, steering and NOS drop to 0 and the handbrake is held on. Override inputs are ignored too.
All RCC input stops (driving, camera, button events) RCC_InputManager.Instance.enabled = false; Set it back to true to resume.

inputs keeps its last values while the manager is disabled, so pair it with SetCanControl(false) if a vehicle must stop.

Changed in V6: disabling and re-enabling RCC_InputManager restores input correctly.

Custom actions

You can add an action (for example Horn) to RCC_InputActions.inputactions and save; the generated class then has it. But updating RCC overwrites that asset, so keep your own actions in a separate asset:

  1. Project window → Create → Input Actions, name it (e.g. MyGameInput).
  2. Add a map, an action Horn (Action Type Button), and a binding (e.g. Keyboard H). Save Asset.
  3. Add the script below to the vehicle (with an AudioSource holding your horn clip).
  4. Drag the Horn action from the asset onto Horn Action.
C#
using UnityEngine;
using UnityEngine.InputSystem;

[RequireComponent(typeof(AudioSource))]
public class MyHorn : MonoBehaviour {

    [Tooltip("The Horn action from your own Input Actions asset.")]
    public InputActionReference hornAction;

    private AudioSource hornSource;

    private void Awake() {

        hornSource = GetComponent<AudioSource>();

    }

    private void OnEnable() {

        if (hornAction == null)
            return;

        hornAction.action.performed += OnHorn;
        hornAction.action.Enable();

    }

    private void OnDisable() {

        if (hornAction == null)
            return;

        hornAction.action.performed -= OnHorn;
        hornAction.action.Disable();

    }

    private void OnHorn(InputAction.CallbackContext context) {

        hornSource.Play();

    }

}

Steering wheels

The G920 bindings above are the defaults. Setup for Logitech and other wheels: Steering Wheels.

Mobile

On-screen controls replace the device bindings for driving when Mobile Controller Enabled is on: Mobile Setup.

Override

To feed your own values to a vehicle (AI, networking, cutscenes): How To Override Inputs.

See Also

BoneCracker Games · Realistic Car ControllerBack to top ↑
Document details

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