Bird
Raised Fist0
Unityframework~20 mins

Keyboard input (GetKey, GetKeyDown) in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Keyboard Input Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output when pressing the spacebar once?
Consider the following Unity C# script attached to a GameObject. What will be printed to the console when the spacebar is pressed once and held for 3 frames?
Unity
void Update() {
    if (Input.GetKeyDown(KeyCode.Space)) {
        Debug.Log("Pressed Down");
    }
    if (Input.GetKey(KeyCode.Space)) {
        Debug.Log("Held Down");
    }
}
APressed Down
BPressed Down\nHeld Down\nHeld Down\nHeld Down
CHeld Down\nHeld Down\nHeld Down\nHeld Down
DPressed Down\nPressed Down\nPressed Down\nPressed Down
Attempts:
2 left
💡 Hint
GetKeyDown triggers only once when the key is first pressed. GetKey triggers every frame while the key is held.
❓ Predict Output
intermediate
2:00remaining
What happens if you replace GetKeyDown with GetKey in this code?
Given this code snippet, what will be the output if the player presses and holds the "A" key for 2 frames? void Update() { if (Input.GetKeyDown(KeyCode.A)) { Debug.Log("Jump"); } }
Unity
void Update() {
    if (Input.GetKey(KeyCode.A)) {
        Debug.Log("Jump");
    }
}
ANo output
BJump
CJump\nJump
DJump\nJump\nJump
Attempts:
2 left
💡 Hint
GetKey returns true every frame the key is held down.
🔧 Debug
advanced
2:00remaining
Why does this code never print "Action triggered"?
Examine the code below. The developer expects "Action triggered" to print once when the player releases the "F" key, but it never does. What is the cause?
Unity
void Update() {
    if (Input.GetKey(KeyCode.F)) {
        if (Input.GetKeyUp(KeyCode.F)) {
            Debug.Log("Action triggered");
        }
    }
}
AGetKeyUp inside GetKey is redundant and never true, so the inner condition never triggers.
BGetKeyUp must be outside the GetKey condition to work properly.
CThe code has a syntax error due to nested if statements.
DThe key code KeyCode.F is incorrect and should be KeyCode.FKey.
Attempts:
2 left
💡 Hint
GetKeyUp is true only on the frame the key is released, but inside GetKey it is never true.
📝 Syntax
advanced
2:00remaining
Which option causes a syntax error in Unity C#?
Which of the following code snippets will cause a syntax error when used inside the Update() method?
Aif (Input.GetKeyDown(KeyCode.Space)) Debug.Log("Jump");
Bif (Input.GetKeyDown(KeyCode.LeftArrow)) { Debug.Log("Turn left"); }
Cif (Input.GetKey(KeyCode.S)) { Debug.Log("Move backward"); }
Dif Input.GetKey(KeyCode.W) { Debug.Log("Move forward"); }
Attempts:
2 left
💡 Hint
Check the syntax of the if statement carefully.
🚀 Application
expert
2:00remaining
How many times will "Fire!" print if the player taps the "F" key quickly 3 times?
Given the code below, how many times will "Fire!" be printed if the player taps the "F" key quickly three separate times (press and release each time)? void Update() { if (Input.GetKeyDown(KeyCode.F)) { Debug.Log("Fire!"); } }
A3
B1
C0
DDepends on frame rate
Attempts:
2 left
💡 Hint
GetKeyDown triggers once per key press, regardless of how fast the taps are.

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

  1. Step 1: Understand GetKeyDown behavior

    Input.GetKeyDown returns true only on the first frame the key is pressed.
  2. Step 2: Apply to space key

    When KeyCode.Space is used, it detects the first press of the space bar only.
  3. Final Answer:

    The exact frame when the space key is first pressed -> Option D
  4. 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

  1. Step 1: Identify method for continuous key hold

    Input.GetKey returns true every frame the key is held down.
  2. Step 2: Match syntax for "W" key

    The correct syntax is Input.GetKey(KeyCode.W) to check if "W" is held.
  3. Final Answer:

    Input.GetKey(KeyCode.W) -> Option A
  4. 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

  1. Step 1: Understand GetKeyDown behavior

    Input.GetKeyDown(KeyCode.A) triggers only once when the key is first pressed.
  2. 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.
  3. Final Answer:

    "Pressed A" once and "Holding A" many times over 3 seconds -> Option C
  4. 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

  1. Step 1: Verify GetKeyDown parameter

    Input.GetKeyDown requires a KeyCode parameter, not a string like "space".
  2. Step 2: Confirm error

    Passing a string will cause a compile-time error; the correct usage is Input.GetKeyDown(KeyCode.Space).
  3. Final Answer:

    GetKeyDown requires a KeyCode, not a string -> Option B
  4. 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

  1. Step 1: Use GetKeyDown for single jump press

    Jump should trigger once when spacebar is first pressed, so use Input.GetKeyDown(KeyCode.Space).
  2. Step 2: Use GetKey for continuous left movement

    Holding left arrow should move continuously, so use Input.GetKey(KeyCode.LeftArrow).
  3. Final Answer:

    if (Input.GetKeyDown(KeyCode.Space)) { Jump(); } if (Input.GetKey(KeyCode.LeftArrow)) { MoveLeft(); } -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard