Menu
CoddyTech

El recorrido

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 48 de 56.

Este capítulo crea un juego de plataformas en 3D. Corres y saltas por plataformas flotantes, te subes a una que se desliza, tocas puntos de control para que una caída no te devuelva al inicio, recoges gemas que se cuentan en pantalla, cruzas la meta para llegar al siguiente nivel e intentas superar tu mejor tiempo. El juego consta de cinco scripts que ya están en el proyecto desde el principio: Player, MovingPlatform, Checkpoint, Gem y FinishLine. Los últimos cuatro están vacíos por ahora, y cada lección completa uno. El jugador es un CharacterController controlado mediante las acciones del Input System, y la cámara es su hija, así que lo sigue sin necesidad de un script.

Un CharacterController se mueve de dos maneras. Move(motion) lo desplaza una distancia y no añade nada, así que la gravedad, los saltos y Time.deltaTime son responsabilidad del script, como en el capítulo sobre Character Controller. SimpleMove(speed) recibe una velocidad en unidades por segundo, la escala por el tiempo del fotograma y añade gravedad; ignora el valor de y que le pases, así que un personaje que se mueva con este método caerá por los bordes, pero nunca podrá saltar. Este perro pastor de un juego de pastoreo visto desde arriba no necesita saltar, así que SimpleMove y la acción Move conforman todo su script:

using UnityEngine;
using UnityEngine.InputSystem;

public class Sheepdog : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    private CharacterController controller;
    private InputAction moveAction;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
    }
}

El jugador del juego de plataformas tiene que saltar, así que mantiene su propia velocidad vertical y se mueve con Move, leyendo las acciones Move y Jump en lugar de la clase Input. Unity recomienda llamar a Move o SimpleMove una vez por fotograma: el desplazamiento y la caída se incluyen en la misma llamada, y isGrounded describe entonces todo ese movimiento.

challenge icon

Desafío

Intermedio

Empieza el juego de plataformas con el jugador. El script Player tiene speed (5), jumpHeight (1.5) y gravity (-9.81), el controller y una velocity para la caída. Busca las acciones Move y Jump una sola vez, en Start, y en Update:

  • Move hace que el jugador camine a speed unidades por segundo: a la derecha y a la izquierda a lo largo del eje x, hacia delante y hacia atrás a lo largo del eje z.
  • La gravedad suma gravity * Time.deltaTime a velocity.y en cada fotograma. Mientras el controlador esté en el suelo y velocity.y sea menor que 0, establece primero velocity.y en -2, para que el jugador permanezca pegado al suelo.
  • Cada vez que se pulsa Jump, mientras el jugador está en el suelo, se establece velocity.y en Mathf.Sqrt(jumpHeight * -2f * gravity): un salto de jumpHeight unidades de altura. Mantener Jump pulsado hace que el jugador salte una sola vez, y no se puede saltar en el aire.
  • Llama a controller.Move una sola vez, con el movimiento y velocity juntos, multiplicados por Time.deltaTime.

Pulsa Play y salta hasta las primeras plataformas; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // camina con la acción Move, salta con la acción Jump y cae por efecto de la gravedad
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales