18. CLASE RIGIDBODY (II)





De un mero vistazo a este gráfico podréis sin duda deducir dos cosas:
1.- La clase Rigidbody es "hermana" de la clase Transform. Están al mismo nivel y heredan de las mismas clases.
2.- Nos va a ocupar un buen número de lecciones estudiarla. Pero el esfuerzo veréis que merece la pena, ya que dominando las clases Transform, Rigidbody (y Collider con sus dos clases hijas, que estudiaremos tras Rigidbody) tendremos controlado en gran parte el tema del movimiento y reacción ante el movimiento ajeno de nuestros gameobjects.

Y sin más dilación, vamos allá.

VARIABLES:

velocity:

Var velocity : Vector3


Representa a través de un vector la velocidad del rigidbody.

No es aconsejable en la mayoría de casos modificar esta variable directamente, ya que derivaría en un comportamiento poco realista (no habría una transición entre la velocidad (o incluso inactividad) anterior y la nueva velocidad. Sí está justificado en cambio su uso para aquellos cambios de velocidad que provienen de un impulso, como por ejemplo un salto.


function FixedUpdate () {
if (Input.GetButtonDown ("Jump")) {
rigidbody.velocity = Vector3(0,6,0);
}
}


Tecleamos este script en MiPrimerScript, lo salvamos y lo arrastramos al cubo.

Hay varias cosas del mismo que necesitarán una explicación. Para empezar, vemos que se está usando una función llamada FixedUpdate. Esta función es parecida a la función Update, de la que ya habíamos hablado, pero a diferencia de ésta, FixedUpdate es llamada (actualizada) a intervalos regulares (fijos). Por lo tanto, así como en la función Update la actualización depende del framerate de cada ordenador, en la función FixedUpdate la actualización se produce en intervalos fijos, iguales para todos los ordenadores. Por esa razón, cuando tratamos con cuestiones relacionadas con la física (y toda la clase Rigidbody está relacionada con la física) habremos de usar la función FixedUpdate y no la función Update (salvo que queramos que las caídas, colisiones y velocidad de los objetos de nuestro juego sean diferentes en función del ordenador con el que juguemos o que, yendo aún más allá, en un juego online multijugador el personaje de cada user vaya a una velocidad distinta, por ejemplo.)

Lo segundo nuevo del script es una referencia a la clase input. La clase input (otra de las clases que ocupan el top ten de importancia en Unity) es la que controla los eventos, esto es, qué tiene que hacer el usuario para disparar, qué tecla hace qué cosa, qué tipo de colisiones provocan que pase otra cosa distinta, etc. En este caso, Input.GetButtomDown(string) dispara un evento cuando el usuario pulsa la tecla que le pasamos a la función como un string. En nuestro Script le pasamos el string "Jump", que por defecto se corresponde a la barra espaciadora.

¿Y qué sucede cuando le damos a la barra espaciadora?. Pues que al rigidbody que en el capítulo anterior le añadimos a nuestro cubo le será aumentada de golpe la velocidad en el vector Y (arriba/abajo). Para comprobarlo, dale al play y cuando el juego esté corriendo presiona la barra espaciadora.


angularVelocity:

Var angularVelocity : Vector3


Vector que representa la velocidad angular del rigidbody. Por velocidad angular nos referimos a la velocidad de rotación. Al igual que con velocity, en la mayoría de casos no cambiaremos la velocidad directamente, pues salvo casos en que precisamos un impulso súbito de la velocidad, no queda realista.

Para entender bien la diferencia entre velocidad y velocidad angular, vamos a completar el script anterior, permitiéndonos aplicar una u otra velocidad, o incluso ambas a la par. MiPrimerScript quedará así:


function FixedUpdate () {
if (Input.GetButtonDown ("Jump")) {
rigidbody.velocity = Vector3(0,6,0);
}

if (Input.GetButtonDown ("Horizontal")) {
rigidbody.angularVelocity = Vector3(7,0,0);
}
}


Como podemos observar, hemos añadido un segundo if de tal manera de que si el jugador en lugar de presionar la barra espaciadora (jump) presiona cualquiera de las dos flechas horizontales de dirección del teclado, la velocidad que se aplique al cubo será velocidad angular.

Salvamos, le damos al play y pulsamos cualquiera de las flechas horizontales. Probablemente observaremos que el cubo hace intención de girarse, pero no tiene la fuerza suficiente para hacerlo. Si, en cambio, pulsamos la barra espaciadora y mientras el cubo está en el aire presionamos la flecha horizontal, asistiremos seguramente a una bonita pirueta de nuestro cubo.

Esto es todo de momento. Bye.

POSTED BY UnityScripts
POSTED IN
DISCUSSION 2 Comments

2 Responses to : 18. CLASE RIGIDBODY (II)

  1. Anónimo says:

    algo sucede con el script solo permite el moviento hacia la derecha ,
    deberei poder moverce a la derecha y a la izquierda, que es lo que esta sucediendo .
    gracais
    saludos

  2. En C# quedaría como:

    void FixedUpdate()
    {
    if (Input.GetButtonDown ("Jump"))
    {
    rigidbody.velocity = new Vector3(0,6,0);
    }
    if (Input.GetButtonDown ("Horizontal"))
    {
    rigidbody.angularVelocity = new Vector3(7,0,0);
    }
    }

Leave a Reply

Con la tecnología de Blogger.