📖 Scenario: You are creating a simple game where a character moves automatically to a target point using Unity's navigation system.
🎯 Goal: Build a Unity script that uses the NavMeshAgent component to move a character to a specified destination.
📋 What You'll Learn
Create a GameObject with a NavMeshAgent component
Set a target destination vector
Use the NavMeshAgent to move the GameObject to the target
Print the current destination to the console
💡 Why This Matters
🌍 Real World
NavMesh Agents are used in games and simulations to move characters or objects intelligently around a scene avoiding obstacles.
💼 Career
Understanding NavMesh Agents is important for game developers and simulation programmers to create smooth and realistic character navigation.
Progress0 / 4 steps
1
Create a NavMeshAgent variable
Declare a private variable called agent of type NavMeshAgent inside the PlayerMovement class.
Unity
Hint
Use private NavMeshAgent agent; inside the class.
2
Initialize the NavMeshAgent variable
In the Start() method, assign the agent variable by getting the NavMeshAgent component attached to the GameObject using GetComponent<NavMeshAgent>().
Unity
Hint
Use agent = GetComponent<NavMeshAgent>(); inside Start().
3
Set the destination for the NavMeshAgent
Create a public Vector3 variable called targetPosition. In the Start() method, after initializing agent, set the agent's destination to targetPosition using agent.SetDestination(targetPosition);.
Unity
Hint
Use agent.SetDestination(targetPosition); after initializing agent.
4
Print the current destination
In the Update() method, print the agent's current destination to the console using Debug.Log(agent.destination);.
Unity
Hint
Use Debug.Log(agent.destination); inside Update().
Practice
(1/5)
1. What is the primary purpose of the NavMeshAgent component in Unity?
easy
A. To handle user input for character movement
B. To create 3D models for characters
C. To move characters smoothly using pathfinding on a navigation mesh
D. To play animations on characters
Solution
Step 1: Understand NavMeshAgent role
The NavMeshAgent component is designed to move objects smoothly on a navigation mesh, handling pathfinding and obstacle avoidance.
Step 2: Compare options
Options B, C, and D describe unrelated functions like modeling, input, and animation, which are not NavMeshAgent's job.
Final Answer:
To move characters smoothly using pathfinding on a navigation mesh -> Option C
Quick Check:
NavMeshAgent moves objects on NavMesh = A [OK]
Hint: NavMeshAgent moves objects using pathfinding on NavMesh [OK]
Common Mistakes:
Confusing NavMeshAgent with animation or input components
Thinking NavMeshAgent creates models
Assuming NavMeshAgent handles user controls
2. Which of the following is the correct way to set a destination for a NavMeshAgent named agent in C#?
easy
A. agent.MoveTo(new Vector3(10, 0, 5));
B. agent.Navigate(new Vector3(10, 0, 5));
C. agent.GoTo(new Vector3(10, 0, 5));
D. agent.SetDestination(new Vector3(10, 0, 5));
Solution
Step 1: Recall NavMeshAgent method for destination
The correct method to set a destination is SetDestination, which takes a Vector3 position.
Step 2: Check method names
Methods like MoveTo, GoTo, and Navigate do not exist on NavMeshAgent.
Final Answer:
agent.SetDestination(new Vector3(10, 0, 5)); -> Option D
Quick Check:
SetDestination sets target position = B [OK]
Hint: Use SetDestination with Vector3 to move NavMeshAgent [OK]
Common Mistakes:
Using non-existent methods like MoveTo or GoTo
Forgetting to use Vector3 as parameter
Confusing SetDestination with transform.position
3. Given the code below, what will be the output in the Unity Console?
using UnityEngine;
using UnityEngine.AI;
public class MoveAgent : MonoBehaviour
{
public NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
Vector3 target = new Vector3(5, 0, 5);
bool result = agent.SetDestination(target);
Debug.Log(result);
}
}
medium
A. True
B. False
C. NullReferenceException error
D. No output
Solution
Step 1: Understand SetDestination return value
The SetDestination method returns true if the destination is valid and reachable on the NavMesh.
Step 2: Analyze given target and agent
The target (5,0,5) is a valid position assuming the NavMesh covers it, so SetDestination returns true and logs it.
Final Answer:
True -> Option A
Quick Check:
SetDestination success returns true = C [OK]
Hint: SetDestination returns true if path is valid [OK]
Common Mistakes:
Assuming SetDestination returns void
Expecting false without checking NavMesh coverage
Ignoring possible NullReference if agent not assigned
4. What is wrong with the following code snippet that tries to move a NavMeshAgent?
public NavMeshAgent agent;
void Update() {
Vector3 destination = new Vector3(10, 0, 10);
agent.SetDestination(destination);
}
medium
A. SetDestination requires a NavMeshPath parameter
B. Calling SetDestination every frame can cause performance issues
C. NavMeshAgent must be moved using transform.position
D. The destination vector is invalid
Solution
Step 1: Review usage of SetDestination in Update
Calling SetDestination every frame is unnecessary and can cause performance overhead because the agent recalculates path repeatedly.
Step 2: Check other options
The destination vector is valid, NavMeshAgent should not be moved by transform.position, and SetDestination takes a Vector3, not NavMeshPath.
Final Answer:
Calling SetDestination every frame can cause performance issues -> Option B
Quick Check:
SetDestination in Update causes overhead = D [OK]
Hint: Avoid calling SetDestination every frame; call only on target change [OK]
Common Mistakes:
Moving agent by changing transform.position directly
Passing wrong parameter types to SetDestination
Ignoring performance impact of repeated calls
5. You want a NavMeshAgent to move to a target only if the path is valid and complete. Which code snippet correctly checks this before moving the agent?
NavMeshPath path = new NavMeshPath();
Vector3 target = new Vector3(7, 0, 7);
// Which code is correct?
hard
A. if (agent.CalculatePath(target, path) && path.status == NavMeshPathStatus.PathComplete) {
agent.SetDestination(target);
}
B. if (agent.SetDestination(target)) {
agent.CalculatePath(target, path);
}
C. agent.SetDestination(target);
if (path.status == NavMeshPathStatus.PathComplete) {
// do nothing
}
D. if (path.status == NavMeshPathStatus.PathPartial) {
agent.SetDestination(target);
}
Solution
Step 1: Understand path calculation and status check
Use CalculatePath to check if a path to the target exists and is complete before setting destination.
Step 2: Analyze each option
if (agent.CalculatePath(target, path) && path.status == NavMeshPathStatus.PathComplete) {
agent.SetDestination(target);
} correctly calls CalculatePath and checks path.status before SetDestination. Others either call methods in wrong order or check wrong status.
Final Answer:
if (agent.CalculatePath(target, path) && path.status == NavMeshPathStatus.PathComplete) {
agent.SetDestination(target);
} -> Option A
Quick Check:
CalculatePath + PathComplete check before SetDestination = A [OK]
Hint: CalculatePath and check PathComplete before SetDestination [OK]
Common Mistakes:
Calling SetDestination before checking path validity
Ignoring path.status or checking wrong status
Confusing CalculatePath and SetDestination roles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.