Bird
Raised Fist0
Unityframework~10 mins

Waypoint systems in Unity - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Waypoint systems
Start
↓
Set waypoints array
↓
Set current waypoint index = 0
↓
Move object towards current waypoint
↓
Check if reached current waypoint?
No→Continue moving
Yes↓
Update current waypoint index to next
↓
Loop back to move towards new waypoint
↓
Repeat until all waypoints visited or loop
↓
End or restart loop
The object moves step-by-step towards each waypoint in order, updating the target when it reaches one.
Execution Sample
Unity
Vector3[] waypoints = {A, B, C};
int current = 0;
while(true) {
  MoveTowards(waypoints[current]);
  if (Reached(waypoints[current])) current = (current + 1) % waypoints.Length;
}
Moves an object through points A, B, C in a loop, updating target when each is reached.
Execution Table
StepCurrent Waypoint IndexCurrent Target PositionObject PositionDistance to TargetAction
10A(0,0,0)5Move towards A
20A(1,0,0)4Move towards A
30A(3,0,0)2Move towards A
40A(5,0,0)0Reached A, update index to 1
51B(5,0,0)7Move towards B
61B(7,0,0)5Move towards B
71B(10,0,0)2Move towards B
81B(12,0,0)0Reached B, update index to 2
92C(12,0,0)4Move towards C
102C(14,0,0)2Move towards C
112C(16,0,0)0Reached C, update index to 0 (loop)
120A(16,0,0)11Move towards A again
💡 Loop continues indefinitely, cycling through waypoints A, B, C
Variable Tracker
VariableStartAfter Step 4After Step 8After Step 11After Step 12
current01200
Object Position(0,0,0)(5,0,0)(12,0,0)(16,0,0)(16,0,0)
Current TargetABCAA
Key Moments - 3 Insights
Why does the current waypoint index reset to 0 after reaching the last waypoint?
Because the code uses modulo (%) with the waypoints length to loop back, as shown in step 11 where index changes from 2 to 0 (execution_table row 11). This makes the movement repeat.
What happens if the object never exactly reaches the waypoint position?
The code checks if distance is zero to update index (execution_table column 'Distance to Target'). If never zero, the index won't update and the object keeps moving towards the same waypoint.
How does the object know which waypoint to move towards next?
The variable 'current' stores the index of the target waypoint and updates when the object reaches it (variable_tracker shows 'current' changes at steps 4, 8, 11).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 4. What is the current waypoint index after reaching waypoint A?
A1
B0
C2
D3
💡 Hint
Check the 'Action' column at step 4 where it says 'Reached A, update index to 1'
At which step does the object start moving towards waypoint C?
AStep 5
BStep 8
CStep 9
DStep 11
💡 Hint
Look at 'Current Target Position' column to see when it changes to C
If the object never reaches a waypoint, what happens to the 'current' index in variable_tracker?
AIt keeps increasing beyond waypoints length
BIt stays the same and does not update
CIt resets to 0 immediately
DIt becomes negative
💡 Hint
Refer to key moment 2 and execution_table 'Distance to Target' column
Concept Snapshot
Waypoint systems move an object through a list of points in order.
Use an index to track the current target waypoint.
Move the object towards the current waypoint each update.
When the object reaches the waypoint, update the index to the next.
Use modulo (%) to loop back to the first waypoint.
This creates smooth, repeatable path movement.
Full Transcript
This visual execution shows how a waypoint system works in Unity. We start with an array of waypoints and a current index set to zero. The object moves towards the waypoint at the current index. Each step, we check if the object has reached the waypoint by measuring distance. If reached, we update the index to the next waypoint, looping back to zero after the last. The execution table tracks the object's position, current target, and index changes step-by-step. Key moments clarify why the index loops and how the object knows which waypoint to move to next. The quiz tests understanding of index updates and movement flow. This helps beginners see how waypoint navigation works in a game or simulation.

Practice

(1/5)
1. What is the main purpose of a waypoint system in Unity?
easy
A. To change the color of an object randomly
B. To move an object smoothly between predefined points
C. To detect collisions between objects
D. To play sound effects when an object moves

Solution

  1. Step 1: Understand waypoint system concept

    A waypoint system defines points in space for an object to move between.
  2. Step 2: Identify the main function

    The main function is to move objects smoothly from one point to another.
  3. Final Answer:

    To move an object smoothly between predefined points -> Option B
  4. Quick Check:

    Waypoint system = smooth movement between points [OK]
Hint: Waypoints guide movement, not colors or sounds [OK]
Common Mistakes:
  • Confusing waypoints with collision detection
  • Thinking waypoints change object appearance
  • Assuming waypoints handle sound
2. Which of the following is the correct way to declare an array of waypoints in C# for Unity?
easy
A. public Vector3[] waypoints;
B. Vector3 waypoints = new Vector3[];
C. public Vector3 waypoints[];
D. Vector3[] waypoints = Vector3[];

Solution

  1. Step 1: Recall C# array syntax

    In C#, arrays are declared with the type followed by [] before the variable name.
  2. Step 2: Check each option

    public Vector3[] waypoints; uses 'public Vector3[] waypoints;' which is correct syntax.
  3. Final Answer:

    public Vector3[] waypoints; -> Option A
  4. Quick Check:

    Array syntax = type[] name [OK]
Hint: Type[] name is correct array syntax in C# [OK]
Common Mistakes:
  • Placing [] after variable name incorrectly
  • Missing 'new' keyword when initializing
  • Using invalid assignment syntax
3. What will be the output of the following code snippet in Unity C#?
Vector3[] waypoints = {new Vector3(0,0,0), new Vector3(1,0,0), new Vector3(2,0,0)};
int currentWaypoint = 0;
currentWaypoint++;
Debug.Log(waypoints[currentWaypoint]);
medium
A. (2.0, 0.0, 0.0)
B. (0.0, 0.0, 0.0)
C. (1.0, 0.0, 0.0)
D. IndexOutOfRangeException

Solution

  1. Step 1: Understand array and index

    The array has 3 points at indices 0, 1, and 2.
  2. Step 2: Track currentWaypoint value

    currentWaypoint starts at 0, then increments to 1 before logging.
  3. Step 3: Identify logged value

    waypoints[1] is Vector3(1,0,0), so output is (1.0, 0.0, 0.0).
  4. Final Answer:

    (1.0, 0.0, 0.0) -> Option C
  5. Quick Check:

    Index 1 in array = (1,0,0) [OK]
Hint: Increment index before access to get next waypoint [OK]
Common Mistakes:
  • Forgetting index increment
  • Confusing array indices starting at 1
  • Expecting an error due to increment
4. Identify the error in this Unity C# code for moving between waypoints:
public Vector3[] waypoints;
private int currentWaypoint = 0;
void Update() {
    transform.position = Vector3.MoveTowards(transform.position, waypoints[currentWaypoint], 5 * Time.deltaTime);
    if(transform.position == waypoints[currentWaypoint]) {
        currentWaypoint++;
    }
}
medium
A. Using '==' to compare Vector3 positions can cause errors
B. Missing initialization of waypoints array
C. currentWaypoint should decrement instead of increment
D. MoveTowards speed should be negative

Solution

  1. Step 1: Check Vector3 comparison

    Using '==' to compare Vector3 can fail due to floating point precision.
  2. Step 2: Identify correct comparison method

    Use Vector3.Distance or check if distance is very small instead.
  3. Final Answer:

    Using '==' to compare Vector3 positions can cause errors -> Option A
  4. Quick Check:

    Vector3 equality check needs tolerance, not '==' [OK]
Hint: Avoid '==' for Vector3; use distance check instead [OK]
Common Mistakes:
  • Assuming '==' works perfectly for Vector3
  • Ignoring array initialization issues
  • Changing waypoint index direction incorrectly
5. You want an object to move through a list of waypoints and loop back to the first waypoint after reaching the last one. Which code snippet correctly updates the current waypoint index in Unity C#?
hard
A. currentWaypoint = waypoints.Length - currentWaypoint;
B. currentWaypoint = currentWaypoint + 1; if(currentWaypoint > waypoints.Length) currentWaypoint = 0;
C. currentWaypoint = currentWaypoint - 1; if(currentWaypoint < 0) currentWaypoint = waypoints.Length - 1;
D. currentWaypoint = (currentWaypoint + 1) % waypoints.Length;

Solution

  1. Step 1: Understand looping with modulo

    Using modulo (%) with array length loops index back to 0 after last index.
  2. Step 2: Analyze each option

    currentWaypoint = (currentWaypoint + 1) % waypoints.Length; correctly uses modulo to loop index safely within bounds.
  3. Final Answer:

    currentWaypoint = (currentWaypoint + 1) % waypoints.Length; -> Option D
  4. Quick Check:

    Modulo operator loops index correctly [OK]
Hint: Use modulo (%) to loop waypoint index [OK]
Common Mistakes:
  • Using > instead of >= for index check
  • Not resetting index properly causing errors
  • Decrementing index instead of incrementing
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