La pelota rodante
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 28 de 71.
Este capítulo crea un pequeño juego, Coin Rush. Haces rodar una pelota por una arena amurallada con las flechas y recoges monedas antes de que se acabe el tiempo. Dos scripts comparten el trabajo, como lo harían en un proyecto de Unity: Ball mueve la pelota y se encarga de la puntuación y el reloj, y Coin está en cada moneda. Coin.cs empieza como una clase vacía, y la siguiente lección la completa.
Una pelota rueda cuando la empujas en lugar de colocarla. Empuja su Rigidbody con AddForce y deja que rote libremente: la fuerza mueve la pelota, y la fricción del suelo sujeta la parte inferior de la pelota y la hace girar. Esta bola de bolos rueda por su carril mientras mantienes pulsada la barra espaciadora:
public float push = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(Vector3.forward * push);
}
}Una pelota que rueda sin deslizarse gira a una velocidad igual a su velocidad dividida por su radio, así que una pelota de radio 0.5 que se mueve a 3 unidades por segundo gira a 6 radianes por segundo (rb.angularVelocity). En cambio, modifica su transform.position o congela su rotación en Constraints del Rigidbody, y se deslizará como un disco sin girar. Una esfera sencilla de un solo color se ve igual en ambos casos: para observar el giro, mira Angular Velocity en la sección Info del Rigidbody mientras el juego está en marcha.
Desafío
IntermedioInicia Coin Rush: mueve la pelota con las flechas.
- En
Ball.cs, dentro deStart(), asignarb = GetComponent<Rigidbody>();. - En
FixedUpdate(), leefloat x = Input.GetAxis("Horizontal");yfloat z = Input.GetAxis("Vertical");; después, llama arb.AddForce(new Vector3(x, 0f, z) * force);.
Pulsa «Jugar», haz clic en el juego y haz rodar la pelota: gira mientras se mueve. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Ball : MonoBehaviour
{
public float force = 10f;
private Rigidbody rb;
void Start()
{
}
void FixedUpdate()
{
// Empuja la pelota con las flechas: Horizontal a lo largo del eje x, Vertical a lo largo del eje z.
}
}
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