Bird
Raised Fist0
Unityframework~10 mins

Touch input basics in Unity - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Touch input basics
Start Frame
↓
Check Touch Count > 0?
No→No Touch Detected
Yes↓
Get Touch Data (position, phase)
↓
Process Touch Based on Phase
↓
Respond to Touch (move, tap, etc.)
↓
End Frame / Wait Next Frame
Each frame, Unity checks if the screen is touched. If yes, it reads touch details and reacts based on touch state.
Execution Sample
Unity
void Update() {
  if (Input.touchCount > 0) {
    Touch touch = Input.GetTouch(0);
    if (touch.phase == TouchPhase.Began) {
      Debug.Log($"Touch started at {touch.position}");
    }
  }
}
This code checks if the screen is touched and logs the position when a new touch begins.
Execution Table
StepInput.touchCountTouch IndexTouch.phaseConditionActionOutput
10--0 > 0?NoNo touch detected, nothing happens
210Began1 > 0?YesTouch detected, check phase
310Beganphase == Began?YesLog touch start position
410Movedphase == Began?NoNo log, touch moved
50--0 > 0?NoNo touch detected, nothing happens
💡 When touchCount is 0, no touch is detected and code skips touch processing.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5
Input.touchCount01110
touch.phase-BeganBeganMoved-
Condition (touch.phase == Began)-TrueTrueFalse-
Key Moments - 3 Insights
Why does the code check if Input.touchCount > 0 before getting touch data?
Because if there are no touches, trying to get touch data causes errors. The execution_table row 1 shows no touch detected when touchCount is 0.
What does TouchPhase.Began mean and why is it important?
TouchPhase.Began means the finger just touched the screen. The code reacts only at this phase to detect new touches, as shown in execution_table rows 2 and 3.
Why doesn't the code log anything when the touch phase is Moved?
Because the condition checks for Began phase only. When phase is Moved (row 4), the condition is false, so no log happens.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is Input.touchCount at Step 2?
A1
B0
C2
D-
💡 Hint
Check the Input.touchCount column at Step 2 in the execution_table.
At which step does the code log the touch start position?
AStep 4
BStep 1
CStep 3
DStep 5
💡 Hint
Look for the Output column mentioning logging in the execution_table.
If Input.touchCount was never checked, what would happen when no touches exist?
ACode runs normally
BError occurs trying to get touch data
CTouch phase is always Began
DTouchCount becomes negative
💡 Hint
Refer to key_moments about why checking touchCount is necessary.
Concept Snapshot
Unity Touch Input Basics:
- Check Input.touchCount > 0 each frame
- Use Input.GetTouch(index) to get touch info
- Touch.phase tells touch state (Began, Moved, Ended)
- React to phases to handle touch events
- Always check touchCount before accessing touches
Full Transcript
In Unity, touch input is checked every frame by looking at Input.touchCount. If it is greater than zero, the program reads the first touch using Input.GetTouch(0). The touch has a phase property that tells if the touch just began, moved, or ended. The example code logs the position only when the touch phase is Began, meaning a new finger just touched the screen. If no touches exist, the code skips processing to avoid errors. This flow ensures safe and correct touch input handling.

Practice

(1/5)
1. Which Unity property tells you how many fingers are currently touching the screen?
easy
A. Input.touchPhase
B. Input.touchCount
C. Input.GetTouchCount()
D. Input.touchPosition

Solution

  1. Step 1: Understand the purpose of Input.touchCount

    This property returns the number of fingers currently touching the screen in Unity.
  2. Step 2: Compare with other options

    Input.touchPhase is not a property but an enum for touch state; Input.GetTouchCount() does not exist; Input.touchPosition gives position, not count.
  3. Final Answer:

    Input.touchCount -> Option B
  4. Quick Check:

    Number of touches = Input.touchCount [OK]
Hint: Remember: touchCount counts fingers on screen [OK]
Common Mistakes:
  • Confusing touchCount with touchPhase
  • Using non-existent methods like GetTouchCount()
  • Mixing position with count
2. Which of the following is the correct way to get the first touch input in Unity?
easy
A. Input.touch(0)
B. Input.GetTouchCount(0)
C. Input.GetTouch(0)
D. Input.touchCount(0)

Solution

  1. Step 1: Recall the method to access touches

    Unity uses Input.GetTouch(index) to get a touch at a specific index.
  2. Step 2: Check syntax correctness

    Input.touch(0) and Input.touchCount(0) are invalid; GetTouchCount(0) does not exist.
  3. Final Answer:

    Input.GetTouch(0) -> Option C
  4. Quick Check:

    First touch = Input.GetTouch(0) [OK]
Hint: Use GetTouch(index) to access specific touch [OK]
Common Mistakes:
  • Using touch as a method instead of GetTouch
  • Trying to call touchCount as a method
  • Confusing method names
3. What will be the output of this code snippet if the user just started touching the screen?
if (Input.touchCount > 0) {
    Touch touch = Input.GetTouch(0);
    if (touch.phase == TouchPhase.Began) {
        Debug.Log("Touch started");
    }
}
medium
A. Touch ended
B. Touch moved
C. No output
D. Touch started

Solution

  1. Step 1: Understand the touch.phase check

    The code checks if the first touch's phase is TouchPhase.Began, which means the touch just started.
  2. Step 2: Match the condition with output

    If the user just started touching, the condition is true and "Touch started" is logged.
  3. Final Answer:

    Touch started -> Option D
  4. Quick Check:

    touch.phase == Began means "Touch started" [OK]
Hint: TouchPhase.Began means finger just touched screen [OK]
Common Mistakes:
  • Confusing Began with Moved or Ended
  • Ignoring touchCount check
  • Assuming output without touch
4. Identify the error in this Unity C# code snippet for detecting a touch:
if (Input.touchCount > 0) {
    Touch touch = Input.GetTouch(0);
    if (touch.phase = TouchPhase.Began) {
        Debug.Log("Touch started");
    }
}
medium
A. Using assignment (=) instead of comparison (==) in if condition
B. Incorrect method name GetTouch instead of GetTouches
C. Missing check for touchCount == 1
D. TouchPhase.Began is not a valid enum

Solution

  1. Step 1: Check the if condition syntax

    The condition uses a single equals sign (=), which assigns instead of compares.
  2. Step 2: Understand correct comparison operator

    To compare values, double equals (==) must be used in C#.
  3. Final Answer:

    Using assignment (=) instead of comparison (==) in if condition -> Option A
  4. Quick Check:

    Use == to compare, not = [OK]
Hint: Use == for comparison, = is assignment [OK]
Common Mistakes:
  • Using = instead of == in conditions
  • Thinking GetTouch is wrong method
  • Unnecessary touchCount == 1 check
  • Misunderstanding TouchPhase enum
5. You want to detect when the user moves their finger on the screen and print the new position. Which code snippet correctly does this inside Update()?
hard
A.
if (Input.touchCount > 0) {
    Touch touch = Input.GetTouch(0);
    if (touch.phase == TouchPhase.Moved) {
        Debug.Log($"Moved to: {touch.position}");
    }
}
B.
if (Input.touchCount > 0) {
    Touch touch = Input.GetTouch(0);
    if (touch.phase == TouchPhase.Ended) {
        Debug.Log($"Moved to: {touch.position}");
    }
}
C.
if (Input.touchCount == 0) {
    Touch touch = Input.GetTouch(0);
    Debug.Log($"Moved to: {touch.position}");
}
D.
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Moved) {
    Debug.Log($"Moved to: {touch.position}");
}

Solution

  1. Step 1: Check for active touches

    We must ensure Input.touchCount > 0 before accessing touches to avoid errors.
  2. Step 2: Detect the move phase and print position

    Using touch.phase == TouchPhase.Moved correctly detects finger movement and prints the position.
  3. Final Answer:

    Code snippet D correctly detects movement and prints position -> Option A
  4. Quick Check:

    Check touchCount > 0 and phase == Moved [OK]
Hint: Always check touchCount > 0 before GetTouch [OK]
Common Mistakes:
  • Checking phase == Ended instead of Moved
  • Accessing GetTouch(0) when touchCount == 0
  • Not checking touchCount before GetTouch
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