La arena
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 56 de 63.
En este capítulo crearás Arena Escape. Esquivas a los cazadores en una arena amurallada mientras oleadas de ellos irrumpen; tres impactos ponen fin a la partida y, cuando sale la última oleada, se abre una salida. El juego consta de cinco scripts que están en el proyecto desde el principio: Player, Hunter, Spawner, Health y Exit. Los últimos cuatro están vacíos por ahora, y cada lección completará uno.
El jugador se mueve con fuerzas en lugar de establecer una velocidad, por lo que el retroceso de un cazador se suma a su movimiento en vez de anularse. Un empujón por sí solo lo aceleraría para siempre, así que linearDamping le resta parte de su velocidad en cada paso: un empujón constante se estabiliza en una velocidad máxima de aproximadamente la aceleración dividida por la amortiguación. Este trineo flotante avanza mientras se mantiene pulsada la barra espaciadora:
[SerializeField] private float accel = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.linearDamping = 2f;
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
}
}Con una aceleración de 12 y una amortiguación de 2, el trineo alcanza una velocidad máxima cercana a 6 unidades por segundo, y cuando se suelta la barra espaciadora, la amortiguación lo detiene en vez de dejarlo deslizarse para siempre. ForceMode.Acceleration ignora la masa, así que un trineo pesado acelera exactamente igual que uno ligero. El colisionador del trineo tiene un PhysicsMaterial sin fricción: si además de la amortiguación hubiera fricción con el suelo, alcanzaría una velocidad máxima menor.
Desafío
IntermedioInicia Arena Escape con el jugador. El Inspector asigna al script Player accel (18) y topSpeed (6). El jugador tiene una masa de 2 y un material sin fricción, y los otros cuatro scripts permanecen vacíos por ahora.
- En
Start, establecelinearDampingdel Rigidbody enaccel / topSpeed, para que el jugador alcance una velocidad estable de aproximadamentetopSpeed. - En cada paso de física, impulsa al jugador con las flechas: izquierda y derecha a lo largo de x, y arriba y abajo a lo largo de z, usando
ForceMode.Accelerationy una aceleración deaccel. - Normaliza la dirección de las flechas para que el movimiento diagonal no sea más rápido que el movimiento en línea recta.
Pulsa Play y deslízate por la arena; después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float accel = 18f;
[SerializeField] private float topSpeed = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// configura la amortiguación y luego mueve al jugador con las flechas
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger