Muévete hacia donde miras
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 41 de 56.
Cuando la cámara mira al jugador desde un ángulo, las flechas deberían mover al jugador tal como lo muestra la pantalla: arriba lo aleja de la cámara y derecha lo mueve hacia la derecha de la cámara. Los ejes del mundo solo hacen eso cuando la cámara mira a lo largo de +z. Así que construye el movimiento a partir de las direcciones de la propia cámara, cam.forward y cam.right.
Primero hay que ajustarlas. Una cámara que mira hacia abajo al jugador tiene un forward que apunta al suelo, así que establece su y en 0 para conservar solo la parte paralela al suelo. Lo que queda es más corto que 1, aproximadamente 0.87 para una cámara inclinada 30 grados hacia abajo, y el jugador caminaría más despacio, así que normalízalo. Este personaje sigue a la cámara principal, que mira hacia una esquina del nivel:
Transform cam = Camera.main.transform;
Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();
Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize(); // las diagonales no son más rápidas
controller.Move(move * speed * Time.deltaTime);Camera.main es la cámara etiquetada como MainCamera. Las dos direcciones se leen en cada fotograma, así que los controles siguen siendo correctos cuando la cámara gira. Arriba y derecha juntos suman dos vectores unitarios en ángulo recto, cuya longitud es aproximadamente 1.41, así que el movimiento se normaliza cuando es mayor que 1.
Desafío
IntermedioLa cámara gira lentamente alrededor del jugador (CameraRig.cs, listo), así que los ejes del mundo siguen girando en pantalla. Haz que las flechas muevan al jugador en relación con la cámara en Mover.cs, donde la gravedad ya está programada. En el Inspector se establecen speed (4) y cam, el Transform de la cámara.
- Arriba mueve al jugador alejándose de la cámara por el suelo; abajo, hacia ella; derecha e izquierda, hacia la derecha y la izquierda de la cámara:
speedunidades por segundo en todas las direcciones, incluidas las diagonales, aunque la cámara mire hacia abajo al jugador. - Mientras camina, el jugador gira para mirar en la dirección en que se mueve. Cuando se detiene, sigue mirando en esa dirección.
Pulsa Reproducir, camina mientras la cámara gira y luego pulsa Comprobar.
Pruébalo tú mismo
using UnityEngine;
public class Mover : MonoBehaviour
{
public float speed = 4f;
public float gravity = -15f;
public Transform cam;
CharacterController controller;
float verticalSpeed;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (controller.isGrounded && verticalSpeed < 0f)
{
verticalSpeed = -2f;
}
verticalSpeed += gravity * Time.deltaTime;
// Se mueve a lo largo de los ejes del mundo: haz que se mueva en relación con cam y mire en la dirección en la que se mueve
Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
move.y = verticalSpeed;
controller.Move(move * Time.deltaTime);
}
}
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 banco8Controlador de personaje
CharacterController.MoveGravedad manualSaltarEmpujar objetosMuévete hacia donde mirasRepaso: doble salto3El 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