📖 Scenario: You are creating a simple game where a character moves between fixed points called waypoints. These waypoints guide the character's path in the game world.
🎯 Goal: Build a basic waypoint system in Unity where a game object moves smoothly from one waypoint to the next in order.
📋 What You'll Learn
Create an array of waypoints as Transform objects
Set a speed variable to control movement
Write code to move the game object towards the current waypoint
Print the current waypoint index when the game object reaches it
💡 Why This Matters
🌍 Real World
Waypoint systems are used in games to guide characters, enemies, or cameras along fixed paths.
💼 Career
Understanding waypoint navigation is important for game developers working on AI movement and level design.
Progress0 / 4 steps
1
Create an array of waypoints
Create a public Transform[] waypoints array with exactly 3 elements in your script.
Unity
Hint
Use public Transform[] waypoints = new Transform[3]; to create the array.
2
Add a speed variable
Add a public float variable called speed and set it to 5f.
Unity
Hint
Declare public float speed = 5f; inside the class.
3
Move towards the current waypoint
Add a private int currentWaypointIndex initialized to 0. In Update(), move the game object towards waypoints[currentWaypointIndex].position using Vector3.MoveTowards and speed. When the game object reaches the waypoint (distance less than 0.1), increase currentWaypointIndex by 1.
Unity
Hint
Use Vector3.MoveTowards(transform.position, waypoints[currentWaypointIndex].position, speed * Time.deltaTime) inside Update().
4
Print current waypoint index on arrival
Inside the if block where the game object reaches the waypoint, add a Debug.Log statement to print "Reached waypoint: " followed by currentWaypointIndex.
Unity
Hint
Use Debug.Log("Reached waypoint: " + currentWaypointIndex); inside the arrival check.
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
Step 1: Understand waypoint system concept
A waypoint system defines points in space for an object to move between.
Step 2: Identify the main function
The main function is to move objects smoothly from one point to another.
Final Answer:
To move an object smoothly between predefined points -> Option B
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
Step 1: Recall C# array syntax
In C#, arrays are declared with the type followed by [] before the variable name.
Step 2: Check each option
public Vector3[] waypoints; uses 'public Vector3[] waypoints;' which is correct syntax.
Final Answer:
public Vector3[] waypoints; -> Option A
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
Step 1: Understand array and index
The array has 3 points at indices 0, 1, and 2.
Step 2: Track currentWaypoint value
currentWaypoint starts at 0, then increments to 1 before logging.
Step 3: Identify logged value
waypoints[1] is Vector3(1,0,0), so output is (1.0, 0.0, 0.0).
Final Answer:
(1.0, 0.0, 0.0) -> Option C
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:
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
Step 1: Check Vector3 comparison
Using '==' to compare Vector3 can fail due to floating point precision.
Step 2: Identify correct comparison method
Use Vector3.Distance or check if distance is very small instead.
Final Answer:
Using '==' to compare Vector3 positions can cause errors -> Option A
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;