Bird
Raised Fist0
Unityframework~20 mins

Input axis for smooth movement in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Smooth Movement Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Unity C# code for horizontal input?
Consider the following Unity C# script snippet inside Update(). What will be the value of moveHorizontal if the player presses the right arrow key for a short moment?
Unity
float moveHorizontal = Input.GetAxis("Horizontal");
Debug.Log(moveHorizontal);
AAlways 1 immediately when the key is pressed
BA value smoothly increasing from 0 to 1 over a short time
CAlways 0 regardless of input
DA value instantly jumping between -1 and 1 with no smoothing
Attempts:
2 left
💡 Hint
Think about how Input.GetAxis works compared to Input.GetAxisRaw.
❓ Predict Output
intermediate
2:00remaining
What does this code print when pressing left arrow key?
Given this code snippet inside Update(), what will be printed when the player presses the left arrow key?
Unity
float moveHorizontal = Input.GetAxisRaw("Horizontal");
Debug.Log(moveHorizontal);
AAlways 0 regardless of input
BA value smoothly changing from 0 to -1
CA value of -1 immediately when the key is pressed
DA value of 1 immediately when the key is pressed
Attempts:
2 left
💡 Hint
Input.GetAxisRaw returns raw input without smoothing.
🔧 Debug
advanced
2:30remaining
Why does this movement feel jerky?
This Unity C# code moves a player horizontally using Input.GetAxisRaw. Why might the movement feel jerky?
Unity
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0, 0);
ABecause Input.GetAxisRaw returns values instantly without smoothing, causing sudden jumps
BBecause Time.deltaTime is not used, causing inconsistent movement
CBecause transform.Translate is called outside Update, causing lag
DBecause speed is multiplied twice, causing too fast movement
Attempts:
2 left
💡 Hint
Think about how input smoothing affects movement feel.
🧠 Conceptual
advanced
2:30remaining
How to achieve smooth acceleration using input axis?
Which approach best achieves smooth acceleration and deceleration for player movement in Unity?
AUse Input.GetAxisRaw and add a fixed value to position each frame
BUse Input.GetAxisRaw and multiply by speed without Time.deltaTime
CUse Input.GetAxis and set position directly without Time.deltaTime
DUse Input.GetAxis and multiply by speed and Time.deltaTime in Update
Attempts:
2 left
💡 Hint
Smooth input and frame-rate independent movement are key.
❓ Predict Output
expert
3:00remaining
What is the value of 'velocity' after this code runs?
Given this Unity C# code snippet inside Update(), what is the value of velocity after pressing right arrow key for 1 second continuously? Assume speed = 5f and frame rate is 60 FPS.
Unity
float moveInput = Input.GetAxis("Horizontal");
float velocity = 0f;
velocity += moveInput * speed * Time.deltaTime;
AAlways 0 because velocity is reset each frame
BExactly 5 immediately after pressing the key
CApproximately 0.0833 (5 * 1/60) after one frame, accumulating over frames
DApproximately 1 after one second
Attempts:
2 left
💡 Hint
Consider variable scope and how 'velocity' is updated each frame.

Practice

(1/5)
1. What does the Unity Input.GetAxis function return when used for movement?
easy
A. A string describing the input device
B. An integer value of either 0 or 1 indicating button press
C. A boolean value true if any key is pressed
D. A smooth float value between -1 and 1 representing input strength

Solution

  1. Step 1: Understand Input.GetAxis behavior

    Input.GetAxis returns a float value that smoothly changes between -1 and 1 based on input device movement, like joystick or keyboard keys.
  2. Step 2: Compare with other input types

    Unlike Input.GetButton or Input.GetKey, it does not return boolean or integer but a float for smooth control.
  3. Final Answer:

    A smooth float value between -1 and 1 representing input strength -> Option D
  4. Quick Check:

    Input.GetAxis returns float between -1 and 1 [OK]
Hint: Remember: GetAxis gives smooth float, not just on/off [OK]
Common Mistakes:
  • Thinking it returns only 0 or 1
  • Confusing with boolean input methods
  • Expecting integer values instead of float
2. Which of the following is the correct syntax to read horizontal input axis in Unity?
easy
A. float move = Input.GetAxis.Horizontal();
B. float move = Input.GetAxis(Horizontal);
C. float move = Input.GetAxis("Horizontal");
D. float move = Input.GetAxis['Horizontal'];

Solution

  1. Step 1: Check method usage

    Input.GetAxis requires a string parameter with axis name in quotes, e.g., "Horizontal".
  2. Step 2: Validate syntax correctness

    float move = Input.GetAxis("Horizontal"); uses correct method call with parentheses and string argument. Other options misuse syntax with missing quotes, wrong brackets, or dot notation.
  3. Final Answer:

    float move = Input.GetAxis("Horizontal"); -> Option C
  4. Quick Check:

    Use parentheses and quotes for axis name [OK]
Hint: Always put axis name in quotes inside GetAxis() [OK]
Common Mistakes:
  • Omitting quotes around axis name
  • Using square brackets instead of parentheses
  • Calling GetAxis as a property instead of method
3. What will be the output of the following Unity C# code snippet if the player presses the right arrow key for horizontal input?
float horizontal = Input.GetAxis("Horizontal");
float speed = 5f;
float movement = horizontal * speed * Time.deltaTime;
Debug.Log(Math.Round(movement, 2));
medium
A. A positive float value close to 0.08 (assuming 60 FPS)
B. Zero, because Input.GetAxis returns only integers
C. A negative float value
D. An error because Time.deltaTime is not used correctly

Solution

  1. Step 1: Understand Input.GetAxis with right arrow

    Pressing right arrow sets horizontal axis near +1 smoothly.
  2. Step 2: Calculate movement value

    Movement = 1 * 5 * (1/60) ≈ 0.0833, rounded to 0.08.
  3. Final Answer:

    A positive float value close to 0.08 (assuming 60 FPS) -> Option A
  4. Quick Check:

    Right arrow -> horizontal ~1 -> movement ~0.08 [OK]
Hint: Multiply axis by speed and deltaTime for smooth movement [OK]
Common Mistakes:
  • Assuming Input.GetAxis returns only 0 or 1
  • Ignoring Time.deltaTime in movement calculation
  • Confusing positive and negative axis values
4. Identify the error in this Unity C# code for smooth horizontal movement:
float move = Input.GetAxis(Horizontal);
transform.Translate(move * speed * Time.deltaTime, 0, 0);
medium
A. Missing quotes around "Horizontal" in GetAxis
B. Using Translate instead of MovePosition
C. Multiplying by Time.deltaTime is incorrect
D. Variable 'speed' is not declared

Solution

  1. Step 1: Check GetAxis parameter syntax

    The axis name must be a string in quotes. Here, Horizontal is used without quotes causing a compile error.
  2. Step 2: Verify other code parts

    Using Translate with speed and Time.deltaTime is correct. Variable 'speed' is assumed declared elsewhere.
  3. Final Answer:

    Missing quotes around "Horizontal" in GetAxis -> Option A
  4. Quick Check:

    Axis names need quotes in GetAxis() [OK]
Hint: Always put axis names in quotes to avoid errors [OK]
Common Mistakes:
  • Forgetting quotes around axis name
  • Confusing Translate with other movement methods
  • Assuming Time.deltaTime is optional
5. You want to move a character smoothly left and right using the horizontal axis, but only when the input magnitude is greater than 0.1 to avoid tiny unwanted movements. Which code snippet correctly implements this in Unity C#? A)
float h = Input.GetAxis("Horizontal");
if (h > 0.1f) {
    transform.Translate(h * speed * Time.deltaTime, 0, 0);
}
B)
float h = Input.GetAxis("Horizontal");
if (Mathf.Abs(h) > 0.1f) {
    transform.Translate(h * speed * Time.deltaTime, 0, 0);
}
C)
float h = Input.GetAxis("Horizontal");
if (h > 0.1f && h < -0.1f) {
    transform.Translate(h * speed * Time.deltaTime, 0, 0);
}
D)
float h = Input.GetAxis("Horizontal");
if (h != 0) {
    transform.Translate(h * speed * Time.deltaTime, 0, 0);
}
hard
A. Checks if h > 0.1f only (ignores negative direction)
B. Uses Mathf.Abs to check if absolute value of h is greater than 0.1
C. Checks if h is both greater than 0.1 and less than -0.1 (impossible)
D. Checks if h is not zero, allowing very small movements

Solution

  1. Step 1: Understand input magnitude filtering

    We want to ignore small inputs less than 0.1 in magnitude, so absolute value check is needed.
  2. Step 2: Analyze each condition

    Checks if h > 0.1f only (ignores negative direction) fails to move left since negative h won't exceed 0.1f. Uses Mathf.Abs to check if absolute value of h is greater than 0.1 uses Mathf.Abs(h) > 0.1f, which is concise and correct. Checks if h is both greater than 0.1 and less than -0.1 (impossible)'s AND condition is impossible. Checks if h is not zero, allowing very small movements allows any non-zero input, including tiny values.
  3. Final Answer:

    Uses Mathf.Abs to check if absolute value of h is greater than 0.1 -> Option B
  4. Quick Check:

    Use Mathf.Abs(h) > threshold for magnitude check [OK]
Hint: Use Mathf.Abs to check input magnitude for smooth control [OK]
Common Mistakes:
  • Checking only positive direction (h > 0.1f), ignoring negatives
  • Not using absolute value to check magnitude
  • Allowing tiny inputs by only checking h != 0
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