En aquest tema, aprendrem els conceptes bàsics de la programació d'intel·ligència artificial (IA) en Unity. Ens centrarem en com crear comportaments senzills per als nostres personatges no jugadors (NPCs) utilitzant scripts de C#. Aquest mòdul inclou una introducció a la IA, exemples pràctics i exercicis per reforçar els conceptes apresos.
Objectius del Tema
- Entendre els conceptes bàsics de la IA en jocs.
- Aprendre a crear comportaments senzills per a NPCs.
- Implementar moviments bàsics i seguiment de jugadors.
- Utilitzar components de Unity per facilitar la programació d'IA.
Conceptes Clau
- IA en Jocs: La intel·ligència artificial en jocs es refereix a la creació de comportaments per a personatges no jugadors (NPCs) que semblin intel·ligents i realistes.
- NPC (Non-Player Character): Personatge del joc que no és controlat per un jugador, sinó per la IA.
- Moviment Bàsic: Desplaçament d'un NPC d'un punt a un altre.
- Seguiment de Jugadors: Capacitat d'un NPC per seguir o perseguir el jugador.
Exemples Pràctics
Exemple 1: Moviment Bàsic d'un NPC
En aquest exemple, crearem un script que farà que un NPC es mogui cap a una posició específica.
using UnityEngine; public class BasicMovement : MonoBehaviour { public Transform target; // La posició objectiu public float speed = 5f; // Velocitat de moviment void Update() { // Moviment cap a la posició objectiu float step = speed * Time.deltaTime; // Calcula la distància a recórrer en aquest frame transform.position = Vector3.MoveTowards(transform.position, target.position, step); } }
Explicació del Codi:
Transform target
: La posició objectiu cap a la qual es mourà l'NPC.float speed
: La velocitat a la qual es mourà l'NPC.Update()
: Mètode que s'executa en cada frame. Calcula la distància a recórrer en aquest frame i mou l'NPC cap a la posició objectiu utilitzantVector3.MoveTowards
.
Exemple 2: Seguiment de Jugadors
En aquest exemple, crearem un script que farà que un NPC segueixi el jugador.
using UnityEngine; public class FollowPlayer : MonoBehaviour { public Transform player; // La posició del jugador public float speed = 5f; // Velocitat de moviment void Update() { // Moviment cap al jugador float step = speed * Time.deltaTime; // Calcula la distància a recórrer en aquest frame transform.position = Vector3.MoveTowards(transform.position, player.position, step); } }
Explicació del Codi:
Transform player
: La posició del jugador que l'NPC seguirà.float speed
: La velocitat a la qual es mourà l'NPC.Update()
: Mètode que s'executa en cada frame. Calcula la distància a recórrer en aquest frame i mou l'NPC cap a la posició del jugador utilitzantVector3.MoveTowards
.
Exercicis Pràctics
Exercici 1: Moviment Bàsic
Crea un script que faci que un NPC es mogui entre dos punts de manera cíclica.
Pistes:
- Utilitza dos
Transform
per definir els punts. - Utilitza una variable booleana per determinar si l'NPC es mou cap al primer o segon punt.
Exercici 2: Seguiment de Jugadors amb Distància
Modifica l'exemple de seguiment de jugadors perquè l'NPC només segueixi el jugador si aquest es troba dins d'una certa distància.
Pistes:
- Utilitza
Vector3.Distance
per calcular la distància entre l'NPC i el jugador. - Afegeix una condició per comprovar si la distància és menor que un valor determinat abans de moure l'NPC.
Solucions
Solució 1: Moviment Bàsic
using UnityEngine; public class CyclicMovement : MonoBehaviour { public Transform pointA; public Transform pointB; public float speed = 5f; private bool movingToB = true; void Update() { Transform target = movingToB ? pointB : pointA; float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, target.position, step); if (Vector3.Distance(transform.position, target.position) < 0.1f) { movingToB = !movingToB; } } }
Solució 2: Seguiment de Jugadors amb Distància
using UnityEngine; public class FollowPlayerWithDistance : MonoBehaviour { public Transform player; public float speed = 5f; public float followDistance = 10f; void Update() { float distance = Vector3.Distance(transform.position, player.position); if (distance < followDistance) { float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, player.position, step); } } }
Errors Comuns i Consells
-
Error Comú: No ajustar la velocitat de moviment amb
Time.deltaTime
, el que pot causar moviments inconsistents.- Solució: Sempre multiplica la velocitat per
Time.deltaTime
per assegurar moviments consistents independentment del frame rate.
- Solució: Sempre multiplica la velocitat per
-
Error Comú: No comprovar la distància abans de moure l'NPC, el que pot causar moviments innecessaris.
- Solució: Utilitza
Vector3.Distance
per comprovar si l'NPC està prou a prop de l'objectiu abans de moure'l.
- Solució: Utilitza
Conclusió
En aquest tema, hem après els conceptes bàsics de la programació d'IA en Unity, incloent com crear moviments bàsics i seguiment de jugadors per a NPCs. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Amb aquests coneixements, estem preparats per explorar tècniques més avançades d'IA en els següents temes.
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