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)
: Retornatrue
mentre la tecla especificada està premuda.Input.GetKeyDown(KeyCode key)
: Retornatrue
en el frame en què la tecla especificada es prem per primera vegada.Input.GetKeyUp(KeyCode key)
: Retornatrue
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)
: Retornatrue
mentre el botó del ratolí especificat està premut.Input.GetMouseButtonDown(int button)
: Retornatrue
en el frame en què el botó del ratolí especificat es prem per primera vegada.Input.GetMouseButtonUp(int button)
: Retornatrue
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
- A la carpeta
Assets/Scripts
, crea un nou script anomenatPlayerMovement
. - 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")
iInput.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 iTime.deltaTime
per assegurar que el moviment sigui suau i independent del frame rate.
Pas 2: Adjuntar l'Script al Jugador
- Selecciona l'objecte del jugador a la jerarquia de Unity.
- Arrossega l'script
PlayerMovement
a l'inspector de l'objecte del jugador per adjuntar-lo.
Pas 3: Provar el Joc
- 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
- Modifica l'script
PlayerMovement
per afegir la funcionalitat de salt. - 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
- 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