Menu
CoddyTech

La arena

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 59 de 71.

Este capítulo crea Arena Escape. Esquivas a los cazadores en una arena amurallada mientras llegan oleadas de ellos; tres impactos ponen fin a la partida y, cuando sale la última oleada, se abre una salida. El juego tiene cinco scripts, incluidos 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 completa uno.

El jugador se mueve con fuerzas en lugar de establecer una velocidad, así que el retroceso de un cazador se suma a su movimiento en vez de anularlo. Un solo empujón lo aceleraría para siempre, así que linearDamping le resta parte de su velocidad en cada paso: un empuje constante se estabiliza en una velocidad máxima aproximada a 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 lugar 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: con la fricción del suelo además de la amortiguación, alcanzaría una velocidad máxima menor.

challenge icon

Desafío

Intermedio

Inicia Arena Escape: el jugador se desliza gracias a las fuerzas.

  1. En Start(), después de la línea GetComponent, establece rb.linearDamping = accel / topSpeed; para que la velocidad se estabilice cerca de topSpeed.
  2. En FixedUpdate(), crea new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. Pasa su normalized multiplicado por accel a rb.AddForce con ForceMode.Acceleration.

Presiona «Jugar» y deslízate por la arena. Después, «Comprobar».

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 el amortiguamiento y luego mueve al jugador con las flechas
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity