We use keyboard input to let players control the game by pressing keys. GetKey checks if a key is held down, and GetKeyDown checks if a key was just pressed once.
Move a character continuously while a key is held down, like walking forward.
Trigger an action only once when a key is first pressed, like jumping.
Detect if a key is being held to charge a power or run faster.
Pause the game when the player presses the Escape key once.
GetKey returns true every frame the key is held down.
GetKeyDown returns true only on the first frame the key is pressed.
Examples
This moves the player forward as long as the W key is pressed.
Unity
if (Input.GetKey(KeyCode.W)) {
// Move forward while W is held
}
This triggers a jump only once when the Space key is pressed.
Unity
if (Input.GetKeyDown(KeyCode.Space)) {
// Jump once when Space is pressed
}
Holding Left Shift makes the player run faster.
Unity
if (Input.GetKey(KeyCode.LeftShift)) {
// Run faster while holding Left Shift
}
Sample Program
This script prints "Moving forward" every frame while the W key is held down, and prints "Jump!" once when the Space key is pressed.
Unity
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Update()
{
if (Input.GetKey(KeyCode.W))
{
Debug.Log("Moving forward");
}
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Jump!");
}
}
}
OutputSuccess
Important Notes
Use GetKeyDown for actions that should happen once per key press.
Use GetKey for continuous actions while the key is held.
Remember to check input inside the Update() method so it runs every frame.
Summary
GetKey detects if a key is held down continuously.
GetKeyDown detects the moment a key is first pressed.
Use these to control player actions smoothly and responsively.
Practice
(1/5)
1. What does Input.GetKeyDown(KeyCode.Space) detect in Unity?
easy
A. If the space key is being held down continuously
B. If any key is pressed
C. If the space key is released
D. The exact frame when the space key is first pressed
Solution
Step 1: Understand GetKeyDown behavior
Input.GetKeyDown returns true only on the first frame the key is pressed.
Step 2: Apply to space key
When KeyCode.Space is used, it detects the first press of the space bar only.
Final Answer:
The exact frame when the space key is first pressed -> Option D
Quick Check:
GetKeyDown = first press frame [OK]
Hint: GetKeyDown triggers only once on key press [OK]
Common Mistakes:
Confusing GetKeyDown with GetKey
Thinking it detects key release
Assuming it detects any key
2. Which of the following is the correct syntax to check if the "W" key is being held down in Unity?
easy
A. Input.GetKey(KeyCode.W)
B. Input.GetKeyDown(KeyCode.W)
C. Input.GetKeyUp(KeyCode.W)
D. Input.IsKeyPressed(KeyCode.W)
Solution
Step 1: Identify method for continuous key hold
Input.GetKey returns true every frame the key is held down.
Step 2: Match syntax for "W" key
The correct syntax is Input.GetKey(KeyCode.W) to check if "W" is held.
Final Answer:
Input.GetKey(KeyCode.W) -> Option A
Quick Check:
GetKey = held down check [OK]
Hint: Use GetKey for continuous key press detection [OK]
Common Mistakes:
Using GetKeyDown instead of GetKey for hold detection
Using non-existent method IsKeyPressed
Confusing GetKeyUp with GetKey
3. What will be printed if the following Unity code runs and the player holds down the "A" key for 3 seconds?
void Update() {
if (Input.GetKeyDown(KeyCode.A)) {
Debug.Log("Pressed A");
}
if (Input.GetKey(KeyCode.A)) {
Debug.Log("Holding A");
}
}
medium
A. "Pressed A" printed many times, "Holding A" once
B. "Pressed A" and "Holding A" printed once each
C. "Pressed A" once and "Holding A" many times over 3 seconds
D. No output because GetKeyDown doesn't detect held keys
Solution
Step 1: Understand GetKeyDown behavior
Input.GetKeyDown(KeyCode.A) triggers only once when the key is first pressed.
Step 2: Understand GetKey behavior
Input.GetKey(KeyCode.A) triggers every frame while the key is held down, so it prints repeatedly during 3 seconds.
Final Answer:
"Pressed A" once and "Holding A" many times over 3 seconds -> Option C
Quick Check:
GetKeyDown = once, GetKey = continuous [OK]
Hint: GetKeyDown prints once; GetKey prints repeatedly while held [OK]
Common Mistakes:
Thinking GetKeyDown prints repeatedly
Confusing GetKey with GetKeyDown
Assuming no output for held keys
4. Identify the error in this Unity code snippet:
void Update() {
if (Input.GetKeyDown("space")) {
Debug.Log("Jump!");
}
}
medium
A. The code is correct and will print "Jump!"
B. GetKeyDown requires a KeyCode, not a string
C. The method name should be GetKeyUp
D. Debug.Log cannot be called inside Update
Solution
Step 1: Verify GetKeyDown parameter
Input.GetKeyDown requires a KeyCode parameter, not a string like "space".
Step 2: Confirm error
Passing a string will cause a compile-time error; the correct usage is Input.GetKeyDown(KeyCode.Space).
Final Answer:
GetKeyDown requires a KeyCode, not a string -> Option B
Quick Check:
GetKeyDown("space") is invalid [OK]
Hint: GetKeyDown requires KeyCode enum, not string [OK]
Common Mistakes:
Believing GetKeyDown accepts strings
Thinking Debug.Log can't be in Update
Suggesting GetKeyUp instead
5. You want to make a player jump only once when the spacebar is pressed, but also allow holding the left arrow key to move continuously. Which code snippet correctly implements this behavior?
void Update() {
// Your code here
}
hard
A. if (Input.GetKeyDown(KeyCode.Space)) { Jump(); } if (Input.GetKey(KeyCode.LeftArrow)) { MoveLeft(); }
B. if (Input.GetKey(KeyCode.Space)) { Jump(); } if (Input.GetKeyDown(KeyCode.LeftArrow)) { MoveLeft(); }
C. if (Input.GetKeyUp(KeyCode.Space)) { Jump(); } if (Input.GetKey(KeyCode.LeftArrow)) { MoveLeft(); }
D. if (Input.GetKeyDown(KeyCode.Space)) { Jump(); } if (Input.GetKeyDown(KeyCode.LeftArrow)) { MoveLeft(); }
Solution
Step 1: Use GetKeyDown for single jump press
Jump should trigger once when spacebar is first pressed, so use Input.GetKeyDown(KeyCode.Space).
Step 2: Use GetKey for continuous left movement
Holding left arrow should move continuously, so use Input.GetKey(KeyCode.LeftArrow).
Final Answer:
if (Input.GetKeyDown(KeyCode.Space)) { Jump(); } if (Input.GetKey(KeyCode.LeftArrow)) { MoveLeft(); } -> Option A
Quick Check:
Jump = GetKeyDown, Move = GetKey [OK]
Hint: Jump once with GetKeyDown; move continuously with GetKey [OK]
Common Mistakes:
Using GetKey for jump causes repeated jumps
Using GetKeyDown for movement causes single-step moves
Using GetKeyUp incorrectly for jump
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.