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.
Desafío
IntermedioInicia Arena Escape: el jugador se desliza gracias a las fuerzas.
- En
Start(), después de la líneaGetComponent, establecerb.linearDamping = accel / topSpeed;para que la velocidad se estabilice cerca detopSpeed. - En
FixedUpdate(), creanew Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")). - Pasa su
normalizedmultiplicado poraccelarb.AddForceconForceMode.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
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity