En aquest tema, explorarem les tècniques de pathfinding i navegació en Unity, que són essencials per crear personatges no jugadors (NPCs) que es moguin de manera intel·ligent i eficient dins del teu joc. Aprendrem a utilitzar el sistema de navegació de Unity, a configurar NavMeshes, i a implementar agents de navegació.
Objectius del Tema
- Entendre els conceptes bàsics de pathfinding i navegació.
- Aprendre a configurar NavMeshes en Unity.
- Implementar agents de navegació per a NPCs.
- Utilitzar NavMesh Obstacles per gestionar col·lisions dinàmiques.
Conceptes Bàsics de Pathfinding i Navegació
Què és el Pathfinding?
El pathfinding és el procés de trobar un camí viable entre dos punts en un espai de joc. Aquest procés és crucial per a la IA dels NPCs, ja que els permet moure's de manera realista i evitar obstacles.
Què és un NavMesh?
Un NavMesh (Navigation Mesh) és una representació simplificada de l'espai de joc que defineix les àrees navegables per als agents de navegació. Unity utilitza NavMeshes per calcular rutes eficients per als NPCs.
Configurant NavMeshes en Unity
Passos per Configurar un NavMesh
-
Preparar l'Escena:
- Assegura't que els objectes de l'escena que han de ser navegables tinguin col·liders.
- Marca els objectes estàtics com a "Navigation Static" des del panell d'inspector.
-
Obrir la Finestra de Navegació:
- Ves a
Window > AI > Navigation
per obrir la finestra de navegació.
- Ves a
-
Configurar les Àrees de Navegació:
- A la finestra de navegació, selecciona la pestanya
Bake
. - Ajusta els paràmetres com
Agent Radius
,Agent Height
,Max Slope
, iStep Height
segons les necessitats del teu joc. - Fes clic a
Bake
per generar el NavMesh.
- A la finestra de navegació, selecciona la pestanya
Exemple Pràctic: Configurant un NavMesh
using UnityEngine; using UnityEngine.AI; public class NavMeshSetup : MonoBehaviour { void Start() { // Assegura't que el NavMesh està generat NavMeshSurface navMeshSurface = GetComponent<NavMeshSurface>(); navMeshSurface.BuildNavMesh(); } }
Implementant Agents de Navegació
Afegint un Agent de Navegació
-
Afegir el Component NavMeshAgent:
- Selecciona l'NPC al qual vols afegir navegació.
- Afegeix el component
NavMeshAgent
des del panell d'inspector.
-
Configurar el NavMeshAgent:
- Ajusta els paràmetres com
Speed
,Angular Speed
,Acceleration
, iStopping Distance
segons les necessitats del teu NPC.
- Ajusta els paràmetres com
Exemple Pràctic: Movent un Agent de Navegació
using UnityEngine; using UnityEngine.AI; public class NPCMovement : MonoBehaviour { public Transform target; private NavMeshAgent agent; void Start() { agent = GetComponent<NavMeshAgent>(); agent.SetDestination(target.position); } void Update() { if (Vector3.Distance(agent.destination, target.position) > 0.1f) { agent.SetDestination(target.position); } } }
Utilitzant NavMesh Obstacles
Afegint Obstacles Dinàmics
-
Afegir el Component NavMeshObstacle:
- Selecciona l'objecte que actuarà com a obstacle.
- Afegeix el component
NavMeshObstacle
des del panell d'inspector.
-
Configurar el NavMeshObstacle:
- Ajusta els paràmetres com
Carve
per permetre que l'obstacle talli el NavMesh dinàmicament.
- Ajusta els paràmetres com
Exemple Pràctic: Configurant un NavMeshObstacle
using UnityEngine; using UnityEngine.AI; public class DynamicObstacle : MonoBehaviour { private NavMeshObstacle obstacle; void Start() { obstacle = GetComponent<NavMeshObstacle>(); obstacle.carving = true; } }
Exercicis Pràctics
Exercici 1: Configurar un NavMesh
- Crea una escena amb diversos objectes estàtics.
- Configura un NavMesh per a l'escena.
- Afegeix un NPC amb un component
NavMeshAgent
i fes que es mogui cap a un punt específic.
Exercici 2: Afegir Obstacles Dinàmics
- Afegeix diversos obstacles dinàmics a l'escena.
- Configura els obstacles perquè tallin el NavMesh dinàmicament.
- Observa com els NPCs ajusten les seves rutes per evitar els obstacles.
Resum
En aquest tema, hem après els conceptes bàsics de pathfinding i navegació en Unity. Hem configurat NavMeshes, implementat agents de navegació, i utilitzat obstacles dinàmics per crear una experiència de joc més realista. Aquests coneixements són fonamentals per desenvolupar IA avançada per als teus jocs.
En el següent tema, explorarem la programació bàsica d'IA, on aprendrem a crear comportaments més complexos per als NPCs.
Curs de Unity
Mòdul 1: Introducció a Unity
- Introducció a Unity i Instal·lació
- Visió General de la Interfície de Unity
- Creant el Teu Primer Projecte
- Objectes de Joc Bàsics i Components
Mòdul 2: Programació Bàsica en Unity
- Introducció a C# per a Unity
- Creant i Adjuntant Scripts
- Entenent MonoBehaviour
- Gestió Bàsica d'Entrades
Mòdul 3: Treballant amb Actius
- Important i Gestionant Actius
- Utilitzant la Botiga d'Actius
- Creant i Utilitzant Prefabs
- Animació Bàsica
Mòdul 4: Física i Col·lisions
- Introducció a la Física de Unity
- Rigidbody i Col·liders
- Detecció Bàsica de Col·lisions
- Utilitzant Materials de Física
Mòdul 5: Interfície d'Usuari (UI)
- Introducció a la UI de Unity
- Creant i Personalitzant Elements de UI
- Gestió d'Esdeveniments de UI
- Creant Menús i HUDs
Mòdul 6: Àudio en Unity
- Introducció a l'Àudio en Unity
- Important i Utilitzant Clips d'Àudio
- Programació Bàsica d'Àudio
- Àudio 3D i So Espacial
Mòdul 7: Programació Avançada
- Conceptes Avançats de C# per a Unity
- Coroutines i Programació Asíncrona
- Objectes Scriptables
- Editors Personalitzats i Gizmos
Mòdul 8: Física Avançada i IA
- Tècniques Avançades de Física
- Pathfinding i Navegació
- Programació Bàsica d'IA
- Màquines d'Estats i Arbres de Comportament
Mòdul 9: Optimització i Rendiment
- Tècniques de Perfilat i Optimització
- Gestió de Memòria
- Reduint Draw Calls
- Optimitzant Física i Col·lisions