La bola rodante
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 27 de 63.
En este capítulo crearás un juego pequeño, Coin Rush. Harás rodar una pelota por una arena amurallada con las flechas y recogerás monedas antes de que se acabe el tiempo. Dos scripts se reparten 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 se coloca sobre cada moneda. Coin.cs empieza como una clase vacía, y la siguiente lección la completará.
Una pelota rueda cuando la empujas en lugar de colocarla. Empuja su Rigidbody con AddForce y deja libre su rotación: la fuerza mueve la pelota, y la fricción del suelo agarra la parte inferior de la pelota y la hace girar. Esta bola de boliche rueda por su pista 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 rapidez 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). Cambia su transform.position en su lugar, o congela su rotación en Constraints del Rigidbody, y se deslizará como un disco sin girar. Una esfera lisa 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 se ejecuta el juego.
Desafío
IntermedioComienza Coin Rush con la pelota. En el Inspector, asigna a Ball una force de 10.
- En
Start(), guarda elRigidbodyde la pelota enrb. - En
FixedUpdate(), impulsa la pelota con las flechas:Input.GetAxis("Horizontal")a lo largo del eje x yInput.GetAxis("Vertical")a lo largo del eje z, ambas veces multiplicadas porforce. - Deja libre su rotación para que ruede.
Por ahora, deja Coin.cs tal como está. Pulsa Play, haz clic en el juego y rueda por la arena; después, pulsa Check.
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 de x, Vertical a lo largo de z.
}
}
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