Get Array of all Input Manager Axes

Hi all

I was hoping to reduce some stringly-typing in my application by removing some hardcoded axis/button strings.

I had hoped the Unity API would provide methods for getting an array of all of the axes currently configured in the Input Manager, but I’m not seeing anything that would help me.

Using .NET Reflector shows that the Input class just wraps a bunch of external methods. So far I have been unable to find the inspector class for the Input Manager.

Is anyone aware of a method to get an array of all of the input axes?

Thanks,
Ves

Yup.

using UnityEngine;
using System.Collections;

using UnityEditor;

public class ReadInputManager
{
    public static void ReadAxes()
    {
        var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0];

        SerializedObject obj = new SerializedObject(inputManager);

        SerializedProperty axisArray = obj.FindProperty("m_Axes");

        if (axisArray.arraySize == 0)
            Debug.Log("No Axes");

        for( int i = 0; i < axisArray.arraySize; ++i )
        {
            var axis = axisArray.GetArrayElementAtIndex(i);

            var name = axis.FindPropertyRelative("m_Name").stringValue;
            var axisVal = axis.FindPropertyRelative("axis").intValue;
            var inputType = (InputType)axis.FindPropertyRelative("type").intValue;

            Debug.Log(name);
            Debug.Log(axisVal);
            Debug.Log(inputType);
        }
    }

    public enum InputType
    {
        KeyOrMouseButton,
        MouseMovement,
        JoystickAxis,
    };

    [MenuItem("Assets/ReadInputManager")]
    public static void DoRead()
    {
        ReadAxes();
    }

}

If you have a look at the Input Manager the rest should be pretty easy to figure out.

If you are dedicated to find out the axis like I do, you can try this. I admit it is not a sexy solution but it gets my job done.

        for(int I=1; i<=28; i++)
        {
            if(Input.GetAxis("Axis"+i)>0)
            {
                Debug.LogFormat("Move Axis{0}", i);
            }
        }

Then in input manager, add 28 inputs mapping to each of the joystick axises.