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.
Desafío
IntermedioEmpieza 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
speedunidades 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.deltaTimeavelocity.yen cada fotograma. Mientras el controlador esté en el suelo yvelocity.ysea menor que 0, establece primerovelocity.yen -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.yenMathf.Sqrt(jumpHeight * -2f * gravity): un salto dejumpHeightunidades de altura. Mantener Jump pulsado hace que el jugador salte una sola vez, y no se puede saltar en el aire. - Llama a
controller.Moveuna sola vez, con el movimiento yvelocityjuntos, multiplicados porTime.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
}
}
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
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada