[Unity]Input & Controller Notes
Keywords: Unity, Input, Controller
Quick Start
Ensure Input System
was installed in Package Manager
.
1, Select Player Object.
2, Add Player Input
Component.
3, Create default actions.
Save
window pop up, choose directory for saving.
4, Open Input Action Asset.
5, Check Generate C# Class
in Inspector
panel of Input Action Asset, then click Apply
.
6, Then we add callback functions of Move
and Fire
actions.
PlayerMovement
for Player
first.
PlayerInput
Component which was added previously.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerMovement : MonoBehaviour
{
private TestInput Input;
private Vector2 movementInput;
void Awake()
{
Input = new TestInput();
Input.Player.Move.performed += ctx => OnMovementChanged(ctx);
Input.Player.Fire.performed += ctx => OnFire();
}
void OnMovementChanged(InputAction.CallbackContext Context)
{
movementInput = Context.ReadValue<Vector2>();
Debug.Log("Move Direction: " + movementInput.ToString());
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void FixedUpdate()
{
}
private void OnEnable()
{
Input.Enable();
}
private void OnDisable()
{
Input.Disable();
}
void OnFire()
{
Debug.Log("Fire+++++++");
}
}
Now when press Arrow Key or click left mouse button, OnMovementChanged()
and OnFire()
would be fired.
Another way to register callback functions.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerMovement : MonoBehaviour
{
[Space]
[SerializeField]
private InputActionAsset InputAssetRef;
private Vector2 movementInput;
void Awake()
{
InputActionMap PlayerInputMap = InputAssetRef.FindActionMap("Player");
InputAction MoveAction = PlayerInputMap.FindAction("Move");
MoveAction.performed += ctx => OnMovementChanged(ctx);
InputAction FireAction = PlayerInputMap.FindAction("Fire");
FireAction.performed += ctx => OnFire();
}
void OnMovementChanged(InputAction.CallbackContext Context)
{
movementInput = Context.ReadValue<Vector2>();
Debug.Log("Move Direction: " + movementInput.ToString());
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void FixedUpdate()
{
}
private void OnEnable()
{
InputAssetRef.Enable();
}
private void OnDisable()
{
InputAssetRef.Disable();
}
void OnFire()
{
Debug.Log("Fire+++++++");
}
}
Then specify the Input Action Asset in Inspector
panel
Input Issues
GetKeyUp not registering after a long hold
Case:
Input.GetKeyUp()
would not work after holding ended.
Caused by:
If hold key, Input.GetKey()
would return true
, and return false
after holding ended (key up), and GetKeyUp
would not work on key up.
Solution:
Using Input.GetKey()
to check if key had been held.
GetKey = machine gun
function Update () {
if (Input.GetKey (KeyCode.Space))
print ("space key is being held down");
}
GetKeyDown = single shot gun
function Update () {
if (Input.GetKeyDown (KeyCode.Space))
print ("space key was pressed once");
}
finally we have the key released handler
function Update () {
if (Input.GetKeyUp (KeyCode.Space))
print ("space key was released");
}
Reference:
http://johnstejskal.com/wp/understanding-getbutton-and-getkey-inputs-in-unity/
Input Reference
New Input (from 2019.1)
NEW INPUT SYSTEM in Unity - Brackeys (Recommended)
https://www.youtube.com/watch?v=Pzd8NhcRzVo
New Unity INPUT SYSTEM - Getting Started (Recommended)
https://www.youtube.com/watch?v=KNiM53UbGfA
Unity Input System | How to Use Input Action Assets (Recommended)
https://www.youtube.com/watch?v=mvuXOyKz7k4
Introducing the new Input System
https://blogs.unity3d.com/2019/10/14/introducing-the-new-input-system/
Quick start guide
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/QuickStartGuide.html?_ga=2.151614137.1431303805.1581172995-179986836.1581172995
An efficient and versatile input system for Unity.
https://github.com/Unity-Technologies/InputSystem
Input - Joystick
Keyboard and Joystick Controls in Unity 2019! (New Input System Tutorial)
https://www.youtube.com/watch?v=Gz0YcjXBJ3U
https://github.com/dawnarc/UnityExamples/tree/master/TopDownShooter
Controller Reference
Controller - Camera Controller
Unity3D 8 Directional Character System
https://www.youtube.com/watch?v=cVy-NTjqZR8
In heaven, all the interesting people are missing. ― Friedrich Nietzsche