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 utilitzant Vector3.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 utilitzant Vector3.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.
  • 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.

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

Mòdul 2: Programació Bàsica en Unity

Mòdul 3: Treballant amb Actius

Mòdul 4: Física i Col·lisions

Mòdul 5: Interfície d'Usuari (UI)

Mòdul 6: Àudio en Unity

Mòdul 7: Programació Avançada

Mòdul 8: Física Avançada i IA

Mòdul 9: Optimització i Rendiment

Mòdul 10: Publicació i Més Enllà

© Copyright 2024. Tots els drets reservats