En aquest tema, aprendrem com gestionar les entrades de l'usuari en Unity. Les entrades són essencials per a la interacció del jugador amb el joc, ja sigui a través del teclat, el ratolí o un controlador de joc. Ens centrarem en els conceptes bàsics i proporcionarem exemples pràctics per ajudar-te a començar.

Objectius

  • Entendre com Unity gestiona les entrades.
  • Aprendre a utilitzar la classe Input per detectar les accions del jugador.
  • Implementar moviments bàsics del jugador utilitzant les entrades del teclat i el ratolí.

Conceptes Clau

La Classe Input

Unity proporciona la classe Input per gestionar les entrades de l'usuari. Aquesta classe conté mètodes i propietats per detectar les accions del jugador, com ara premses de tecles, moviments del ratolí i esdeveniments del controlador de joc.

Mètodes Comuns de la Classe Input

  • Input.GetKey(KeyCode key): Retorna true mentre la tecla especificada està premuda.
  • Input.GetKeyDown(KeyCode key): Retorna true en el frame en què la tecla especificada es prem per primera vegada.
  • Input.GetKeyUp(KeyCode key): Retorna true en el frame en què la tecla especificada es deixa anar.
  • Input.GetAxis(string axisName): Retorna el valor d'un eix (per exemple, "Horizontal" o "Vertical").
  • Input.GetMouseButton(int button): Retorna true mentre el botó del ratolí especificat està premut.
  • Input.GetMouseButtonDown(int button): Retorna true en el frame en què el botó del ratolí especificat es prem per primera vegada.
  • Input.GetMouseButtonUp(int button): Retorna true en el frame en què el botó del ratolí especificat es deixa anar.

Exemple Pràctic: Moviment del Jugador

Pas 1: Crear un Nou Script

  1. A la carpeta Assets/Scripts, crea un nou script anomenat PlayerMovement.
  2. Obre l'script i afegeix el següent codi:
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        // Obtenir les entrades del teclat
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        // Crear un vector de moviment
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Aplicar el moviment al jugador
        transform.Translate(movement * speed * Time.deltaTime, Space.World);
    }
}

Explicació del Codi

  • Input.GetAxis("Horizontal") i Input.GetAxis("Vertical") obtenen les entrades dels eixos horitzontal i vertical, respectivament. Per defecte, aquests eixos estan mapejats a les tecles de fletxa i les tecles WASD.
  • Vector3 movement crea un vector de moviment basat en les entrades del jugador.
  • transform.Translate mou el jugador en la direcció del vector de moviment, multiplicat per la velocitat i Time.deltaTime per assegurar que el moviment sigui suau i independent del frame rate.

Pas 2: Adjuntar l'Script al Jugador

  1. Selecciona l'objecte del jugador a la jerarquia de Unity.
  2. Arrossega l'script PlayerMovement a l'inspector de l'objecte del jugador per adjuntar-lo.

Pas 3: Provar el Joc

  1. Executa el joc i utilitza les tecles de fletxa o les tecles WASD per moure el jugador.

Exercici Pràctic

Objectiu

Implementar un sistema de salt per al jugador utilitzant la tecla d'espai.

Instruccions

  1. Modifica l'script PlayerMovement per afegir la funcionalitat de salt.
  2. Assegura't que el jugador només pugui saltar quan estigui a terra.

Solució

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;
    public float jumpForce = 5f;
    private bool isGrounded;

    void Update()
    {
        // Obtenir les entrades del teclat
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        // Crear un vector de moviment
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Aplicar el moviment al jugador
        transform.Translate(movement * speed * Time.deltaTime, Space.World);

        // Saltar quan es prem la tecla d'espai
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {
            GetComponent<Rigidbody>().AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
            isGrounded = false;
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        // Comprovar si el jugador està a terra
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
        }
    }
}

Explicació del Codi

  • Input.GetKeyDown(KeyCode.Space) detecta quan es prem la tecla d'espai.
  • GetComponent<Rigidbody>().AddForce aplica una força cap amunt per fer saltar el jugador.
  • OnCollisionEnter comprova si el jugador ha col·lisionat amb el terra per permetre un altre salt.

Resum

En aquesta secció, hem après com gestionar les entrades bàsiques del jugador en Unity utilitzant la classe Input. Hem implementat moviments bàsics del jugador i un sistema de salt. Aquestes habilitats són fonamentals per crear jocs interactius i dinàmics. En el següent mòdul, explorarem com treballar amb actius en Unity.

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