Velocidad
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 5 de 71.
rb.linearVelocity indica cómo se mueve el cuerpo en este momento: un Vector3 en metros por segundo a lo largo de x, y y z. Leerlo te dice hacia dónde se dirige el cuerpo, y rb.linearVelocity.magnitude es su velocidad. Al establecerlo, el movimiento cambia de inmediato, sin aceleración gradual ni intervención de la masa: una caja de 1 kg y una caja fuerte de 50 kg configuradas a 2 m/s se mueven ambas exactamente a 2 m/s a partir del siguiente paso de física. La gravedad, la fricción y los impactos siguen actuando sobre el cuerpo después.
Este kart avanza exactamente a cruise m/s. Copia la velocidad, cambia solo z y la vuelve a asignar, así que se conserva el valor de y que le dio la gravedad y el kart sigue cayendo al llegar al final de una rampa:
void FixedUpdate()
{
Vector3 vel = rb.linearVelocity;
vel.z = cruise; // hacia adelante a exactamente cruise m/s
rb.linearVelocity = vel; // y conserva el valor que le dio la gravedad
}Establecer también y en 0 descartaría la velocidad que le da la gravedad en cada paso, y el kart se deslizaría hacia abajo al salir de la rampa en lugar de caer. Antes de Unity 6, esta propiedad se llamaba velocity. Los tutoriales antiguos siguen escribiendo rb.velocity: en Unity 6, compila, pero muestra una advertencia de que velocity está obsoleto y se ha renombrado como linearVelocity. Del mismo modo, drag pasó a llamarse linearDamping. Escribe los nombres nuevos.
Desafío
FácilHaz caminar al robot exactamente a speed m/s y deja que se caiga por el borde.
- En
FixedUpdate(), leefloat h = Input.GetAxisRaw("Horizontal");y obténfloat vde"Vertical". - Asigna
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);, conservando la gravedad en y.
Presiona «Jugar» y camina fuera del borde: el robot se detiene cuando sueltas el control y se cae. Después, presiona «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class RobotWalk : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Muévete exactamente a speed con las flechas, conservando la y de la gravedad
}
}
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