📖 Scenario: You are creating a simple game character that moves smoothly when the player presses arrow keys or WASD keys.
🎯 Goal: Build a Unity script that uses input axis to move a character smoothly in horizontal direction.
📋 What You'll Learn
Create a float variable to store horizontal input
Create a float variable for movement speed
Use Input.GetAxis("Horizontal") to get smooth input
Move the character horizontally using the input and speed
Print the character's new position on each frame
💡 Why This Matters
🌍 Real World
Smooth character movement is essential in many games to provide natural and responsive controls.
💼 Career
Understanding input axes and smooth movement is a fundamental skill for game developers working with Unity.
Progress0 / 4 steps
1
Create movement speed variable
Create a public float variable called speed and set it to 5f inside the PlayerMovement class.
Unity
Hint
Use public float speed = 5f; inside the class.
2
Get horizontal input axis
Inside the Update() method, create a float variable called horizontalInput and set it to Input.GetAxis("Horizontal").
Unity
Hint
Use float horizontalInput = Input.GetAxis("Horizontal"); inside Update.
3
Move the character horizontally
Inside the Update() method, after getting horizontalInput, move the character by changing its position using transform.Translate() with horizontalInput * speed * Time.deltaTime on the x-axis.
Unity
Hint
Use transform.Translate(horizontalInput * speed * Time.deltaTime, 0, 0); to move smoothly.
4
Print the character's position
Inside the Update() method, after moving the character, add a Debug.Log() statement to print the character's current position using transform.position.
Unity
Hint
Use Debug.Log("Position: " + transform.position); to print position.
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
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.
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.
Final Answer:
A smooth float value between -1 and 1 representing input strength -> Option D
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
Step 1: Check method usage
Input.GetAxis requires a string parameter with axis name in quotes, e.g., "Horizontal".
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.
Final Answer:
float move = Input.GetAxis("Horizontal"); -> Option C
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?
The axis name must be a string in quotes. Here, Horizontal is used without quotes causing a compile error.
Step 2: Verify other code parts
Using Translate with speed and Time.deltaTime is correct. Variable 'speed' is assumed declared elsewhere.
Final Answer:
Missing quotes around "Horizontal" in GetAxis -> Option A
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
Step 1: Understand input magnitude filtering
We want to ignore small inputs less than 0.1 in magnitude, so absolute value check is needed.
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.
Final Answer:
Uses Mathf.Abs to check if absolute value of h is greater than 0.1 -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.