Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Inicia 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, establece linearDamping del Rigidbody en accel / topSpeed, para que el jugador alcance una velocidad estable de aproximadamente topSpeed.
  • 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.Acceleration y una aceleración de accel.
  • 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
    }
}
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 Física y jugabilidad