unity3d Input System Reading Key Press and difference between GetKey, GetKeyDown and GetKeyUp


Example

Input must must read from the Update function.

Reference for all the available Keycode enum.

1. Reading key press with Input.GetKey:

Input.GetKey will repeatedly return true while the user holds down the specified key. This can be used to repeatedly fire a weapon while holding the specified key down. Below is an example of bullet auto-fire when the Space key is held down. The player doesn't have to press and release the key over and over again.

public GameObject bulletPrefab;
public float shootForce = 50f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        Debug.Log("Shooting a bullet while SpaceBar is held down");

        //Instantiate bullet
        GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation) as GameObject;

        //Get the Rigidbody from the bullet then add a force to the bullet
        bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * shootForce);
    }
}

2.Reading key press with Input.GetKeyDown:

Input.GetKeyDown will true only once when the specified key is pressed. This is the key difference between Input.GetKey and Input.GetKeyDown. One example use of its use is to toggle a UI or flashlight or an item on/off.

public Light flashLight;
bool enableFlashLight = false;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        //Toggle Light 
        enableFlashLight = !enableFlashLight;
        if (enableFlashLight)
        {
            flashLight.enabled = true;
            Debug.Log("Light Enabled!");
        }
        else
        {
            flashLight.enabled = false;
            Debug.Log("Light Disabled!");
        }
    }
}

3.Reading key press with Input.GetKeyUp:

This is the exact opposite of Input.GetKeyDown. It is used to detect when key-press is released/lifted. Just like Input.GetKeyDown, it returns true only once. For example, you can enable light when key is held down with Input.GetKeyDown then disable the light when key is released with Input.GetKeyUp.

public Light flashLight;
void Update()
{
    //Disable Light when Space Key is pressed
    if (Input.GetKeyDown(KeyCode.Space))
    {
        flashLight.enabled = true;
        Debug.Log("Light Enabled!");
    }

    //Disable Light when Space Key is released
    if (Input.GetKeyUp(KeyCode.Space))
    {
        flashLight.enabled = false;
        Debug.Log("Light Disabled!");
    }
}