En aquest tema, explorarem dos conceptes fonamentals per a la programació d'intel·ligència artificial (IA) en Unity: les màquines d'estats (FSM) i els arbres de comportament. Aquests patrons de disseny són àmpliament utilitzats per gestionar el comportament dels personatges no jugadors (NPCs) i altres elements del joc.
Màquines d'Estats Finits (FSM)
Què és una Màquina d'Estats Finits?
Una màquina d'estats finits (FSM) és un model de computació que consisteix en un nombre finit d'estats, transicions entre aquests estats i accions. És una manera senzilla i efectiva de gestionar el comportament d'un NPC.
Components d'una FSM
- Estats: Representen les diferents condicions o modes en què pot estar un NPC.
- Transicions: Canvis d'un estat a un altre basats en condicions específiques.
- Accions: Operacions que es realitzen quan un NPC està en un estat determinat o quan es produeix una transició.
Exemple Pràctic
Imagina un NPC que pot estar en tres estats: Patrullant, Perseguint i Atacant.
public enum State { Patrolling, Chasing, Attacking } public class NPCController : MonoBehaviour { public State currentState; void Update() { switch (currentState) { case State.Patrolling: Patrol(); if (SeePlayer()) { currentState = State.Chasing; } break; case State.Chasing: Chase(); if (InAttackRange()) { currentState = State.Attacking; } else if (!SeePlayer()) { currentState = State.Patrolling; } break; case State.Attacking: Attack(); if (!InAttackRange()) { currentState = State.Chasing; } break; } } void Patrol() { // Codi per patrullar } void Chase() { // Codi per perseguir } void Attack() { // Codi per atacar } bool SeePlayer() { // Codi per detectar el jugador return true; // Placeholder } bool InAttackRange() { // Codi per verificar si el jugador està a l'abast d'atac return true; // Placeholder } }
Exercici Pràctic
Crea una FSM per a un NPC que pugui estar en els estats de "Idle", "Walking" i "Running". Implementa les transicions basades en la distància al jugador.
Arbres de Comportament
Què és un Arbre de Comportament?
Un arbre de comportament és una estructura jeràrquica que defineix una seqüència d'accions o comportaments que un NPC pot realitzar. És més flexible i escalable que una FSM, especialment per a comportaments complexos.
Components d'un Arbre de Comportament
- Nodes: Representen accions o decisions.
- Arrels: El node inicial de l'arbre.
- Fulles: Nodes terminals que no tenen fills.
- Sucursals: Nodes que tenen fills i defineixen la lògica de decisió.
Exemple Pràctic
Imagina un NPC que ha de decidir entre patrullar, perseguir o atacar basant-se en la distància al jugador.
public abstract class Node { public abstract bool Execute(); } public class PatrolNode : Node { public override bool Execute() { // Codi per patrullar return true; } } public class ChaseNode : Node { public override bool Execute() { // Codi per perseguir return true; } } public class AttackNode : Node { public override bool Execute() { // Codi per atacar return true; } } public class SelectorNode : Node { private List<Node> children = new List<Node>(); public void AddChild(Node child) { children.Add(child); } public override bool Execute() { foreach (Node child in children) { if (child.Execute()) { return true; } } return false; } } public class NPCController : MonoBehaviour { private Node rootNode; void Start() { rootNode = new SelectorNode(); ((SelectorNode)rootNode).AddChild(new AttackNode()); ((SelectorNode)rootNode).AddChild(new ChaseNode()); ((SelectorNode)rootNode).AddChild(new PatrolNode()); } void Update() { rootNode.Execute(); } }
Exercici Pràctic
Crea un arbre de comportament per a un NPC que pugui decidir entre "Idle", "Walking" i "Running" basant-se en la distància al jugador i altres condicions com la visibilitat.
Resum
En aquesta secció, hem après sobre les màquines d'estats finits (FSM) i els arbres de comportament, dos patrons de disseny essencials per a la programació d'IA en Unity. Les FSM són ideals per a comportaments senzills i ben definits, mentre que els arbres de comportament ofereixen més flexibilitat i escalabilitat per a comportaments complexos.
En el següent mòdul, explorarem tècniques avançades de física per millorar la interacció i el realisme en els nostres jocs.
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