docs.unity3d.com
    Show / Hide Table of Contents

    Workflow Overview - Directly Reading Device States

    image alt text

    This is the simplest and most direct workflow, but the least flexible. It’s useful if you want a quick implementation with one type of device. It might not be the best choice if you want to provide your users with multiple types of input or if you want to target multiple platforms.

    You can directly read the values from connected devices by referring to the device’s controls and reading the values they are currently generating, using code like this:

    using UnityEngine;
    using UnityEngine.InputSystem;
    public class MyPlayerScript : MonoBehaviour
    {
        void Update()
        {
            var gamepad = Gamepad.current;
            if (gamepad == null)
            {
                return; // No gamepad connected.
            }
    
            if (gamepad.rightTrigger.wasPressedThisFrame)
            {
                // 'Use' code here
            }
    
            Vector2 move = gamepad.leftStick.ReadValue();
            {
                // 'Move' code here
            }
        }
    }
    

    The example above reads values directly from the right trigger, and the left stick, of the currently connected gamepad. It does not use the input system’s "Action" class, and instead the conceptual actions in your game or app, such as "move" and "use", are implicitly defined by what your code does in response to the input. You can use the same approach for other Device types such as the keyboard or mouse.

    This is often the fastest way to set up some code which responds to input, but it is the least flexible because there is no abstraction between your code and the values generated by a specific device.

    If you choose to use this technique:

    • You won’t benefit from Unity’s management of actions and interactions.

    • It is harder to make your game or app work with multiple types of input device.

    • Your input bindings are hard-coded in your script, so any changes to bindings require changes to the code.

    • It is harder to allow the user to remap their own controls to different actions at run time.

    You can find an example of this workflow in the sample projects included with the input system package. To find it, in the Project window, look in Assets > Samples > SimpleDemo and open the scene: SimpleDemo_UsingState.

    See Supported Devices for more information about devices supported by the input system, and the API to read their states.

    For more a more flexible workflow, you should use embedded actions or define your actions in an action asset, explained in the following pages.

    Back to top
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023