El recorrido
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 49 de 60.
En este capítulo crearás un juego de plataformas en 3D. Correrás y saltarás entre plataformas flotantes, subirás a una que se desliza, tocarás puntos de control para que una caída no te devuelva al inicio, recogerás gemas que se cuentan en pantalla, cruzarás la meta para pasar al siguiente nivel e intentarás 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 completará uno. El jugador es un CharacterController controlado con las acciones del Input System, y la cámara es hija suya, por lo 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 multiplica 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 se 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 constituyen 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 al caminar y la caída se incluyen en la misma llamada, y entonces isGrounded describe todo ese movimiento.
Desafío
IntermedioHaz que el jugador camine, salte y caiga.
- En
Start(), buscaMoveyJumpconInputSystem.actions.FindAction. - En
Update(), camina aspeed: el valor x de Move a lo largo del eje x y su valor y a lo largo del eje z. - Suma
gravity * Time.deltaTimeavelocity.y; establece-2fcuando esté en el suelo y cayendo. Al saltar, si está en el suelo, asígnaleMathf.Sqrt(jumpHeight * -2f * gravity). - Llama a
controller.Move((move + velocity) * Time.deltaTime)una vez.
Pulsa «Jugar»: salta hasta la primera plataforma. Después, pulsa «Comprobar».
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
}
}
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 sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity