Getting analog input values from multiple controllers

Hi all

I’m pretty happy with being able to check controller input by doing:

Input.GetKey(“joystick 1 button 0”);

But I’m completely thrown off by accessing analogue input.

Can this only be read from the virtual inputs?
How can you specify which controller to read?


Axis input has to be manually defined in Unity’s Input Manager (Edit → Project Settings → Input) for as many controllers you want to support. More information about the Input Manager can be found here.

Image of Input Manager

In each axis defined in the Input Manager, you can define which joystick the axis responds to by the “Joy Num” property. The the picture above, the manually defined axis “RightAnalog_horizontal” had a JoyNum of “Joystick 2”. It only responds to the second controller.

To use this in code you would need to do something like this:

float axisValue = Input.GetAxis("RightAnalog_horizontal");

var speed : float = 10.0;
var rotationSpeed : float = 100.0;

function Update () {
    // Get the horizontal and vertical axis.
    // By default they are mapped to the arrow keys.
    // The value is in the range -1 to 1
    var translation : float = Input.GetAxis ("Vertical") * speed;
    var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;
    // Make it move 10 meters per second instead of 10 meters per frame...
    translation *= Time.deltaTime;
    rotation *= Time.deltaTime;
    // Move translation along the object's z-axis
    transform.Translate (0, 0, translation);
    // Rotate around our y-axis
    transform.Rotate (0, rotation, 0);