Unidad - Cuerpos rígidos y física
El principal problema de las colisiones en el último capítulo fue el código. We will now modify the values of the GameObject’s position directly. Simplemente estamos agregando un valor a la posición, si el jugador está presionando una tecla. Necesitamos una forma de hacer que el jugador se mueva de tal manera que reaccione correctamente a los límites y otros GameObjects.
Para hacerlo, necesitamos entender qué rigidbodiesson. Los cuerpos rígidos son componentes que permiten que un GameObject reaccionereal-time physics. Esto incluye reacciones a las fuerzas y la gravedad, la masa, la resistencia y el impulso.
Puede adjuntar un Rigidbody a su GameObject simplemente haciendo clic en Add Component y escribiendo Rigidbody2D en el campo de búsqueda.
Al hacer clic en Rigidbody2D, se adjuntará el componente a su GameObject. Ahora que está adjunto, notará que se han abierto muchos campos nuevos.
Con la configuración predeterminada, el GameObject caerá verticalmente downdebido a la gravedad. Para evitar esto, configure elGravity Scale a 0.
Ahora, jugar el juego no mostrará ninguna diferencia visible, porque GameObject aún no tiene nada que ver con su componente de física.
Para resolver nuestro problema, abramos nuestro código nuevamente y lo reescribamos.
public class Movement : MonoBehaviour {
public float speed;
public Rigidbody2D body;
// Update is called once per frame
void Update() {
float h = Input.GetAxisRaw(“Horizontal”);
float v = Input.GetAxisRaw(“Vertical”);
body.velocity = new Vector2(h * speed, v * speed);
}
}
Podemos ver que creamos un referencea un Rigidbody2D en las declaraciones, y nuestro código de actualización funciona en esa referencia en lugar de la transformación del objeto. Esto significa que ahora se le ha dado a Rigidbody la responsabilidad de moverse.
Puede esperar el bodyreferencia para lanzar NullReferenceException, ya que no le hemos asignado nada. Si compila y ejecuta el juego como está, obtendrá el siguiente error en la parte inferior izquierda del editor
Para solucionar esto, consideremos el componente creado por el script. Recuerde que las propiedades públicas crean sus propios campos en Unity, como hicimos con la variable speed.
Ajuste la velocidad a un valor más alto, alrededor de 5, y juegue.
¡Tus colisiones ahora funcionarán correctamente!