24. CLASE RIGIDBODY (y VIII)










Sleep:

Function Sleep () : void


Fuerza al rigidbody a dormir al menos un frame. Un uso común es llamar esta función al principio del juego para que el rigidbody no consuma recursos hasta que sea activado.



IsSleeping:

Function IsSleeping () : Boolean


Booleano que devuelve true si el rigidbody está durmiendo.


WakeUp:

Function WakeUp () : void


Fuerza al rigidbody a despertarse.


SweepTest:

Function SweepTest (direction : Vector3, hitInfo : RaycastHit, distance : float = Mathf.Infinity) : Boolean


Devuelve true cuando un barrido del rigidbody intercepta algún collider. Esto funciona de la siguiente manera: nuestro rigidbody lanza en una dirección (parámetro direction de tipo Vector3) un rayo (pensemos hasta que no estudiemos la clase RaycastHit en una especie de láser o sonar de presencia, con la salvedad de que en este caso el rayo devolverá información de aquéllo con lo que ha chocado) hasta una determinada distancia (distance, de tipo float, que por defecto es infinito) y si el rayo tropieza con un collider, la función devuelve true.

Obviamente, esto es de gran utilidad para, por ejemplo, que nuestro personaje tenga información para evitar colisiones.

Veamos un pequeño ejemplo:

var rayo : RaycastHit;

function Update () {
if (rigidbody.SweepTest (-transform.right, rayo, 10)) {
Debug.Log("Hay un obstaculo a " + rayo.distance + " metros a la izquierda");
}
}


El script funciona como sigue: primero declaramos una variable de tipo RaycastHit para que recoja toda la información del collider que nuestra función pueda detectar en su barrido. Acto seguido lanzamos a través de la función SweepTest un rayo en dirección izquierda (-transform.right) hasta una distancia de diez metros. Caso de topar con un collider, distinta información del mismo será almacenada en la variable rayo y la función devolverá true, con lo cual se imprimirá la información tecleada, indicando la distancia del collider hallado.

Si le damos al play, observamos que nuestra función ha hallado un collider a la izquierda de nuestro cubo.


SweepTestAll:

Function SweepTestAll (direction : Vector3, distance : float = Mathf.Infinity) : RaycastHit[]

Es parecida a la anterior, pero devolviendo un array de tipo RaycastHit con toda la información de todos los colliders hallados en el camino


Además de las funciones tradicionales contenidas en la clase Rigidbody, ésta también tiene un tipo de función específica, que se disparan cuando acontece un evento. Unity las trata como "mensajes que envía la clase". Son tres:

OnCollisionEnter:

function OnCollisionEnter (collisionInfo : Collision) : void


OnCollisionEnter es llamada cuando nuestro rigidbody/collider toca otro rigidbody/collider.

En contraste con la función OnTriggerEnter, a OnCollisionEnter se le pasa como parámetro una instancia de la clase Collision, la cual contiene información sobre puntos de contacto, velocidad de impacto, etc.



OnCollisionExit:

function OnCollisionExit (collisionInfo : Collision) : void


OnCollisionExit es llamada cuando nuestro collider/rigidbody deja de tocar otro rigidbody/collider.


OnCollisionStay:

function OnCollisionStay (collisionInfo : Collision) : void


OnCollisionStay es llamada una vez cada frame para cada collider/rigidbody que esté tocando nuestro rigidbody/collider.


Y con esto acabamos la clase Rigidbody.

POSTED BY UnityScripts
POSTED IN
DISCUSSION 1 Comment

One Response to : 24. CLASE RIGIDBODY (y VIII)

  1. Unknown says:

    Una duda que tengo respecto a esta clase, una vez entra al colider, si yo le digo onTriggerEnter para que gire y cambie de dirección, si el cubo de colision que uso es muy grande, hasta que salga seguira recibiendo true y seguirá recibiendo la orden de invertir dirección?

Leave a Reply

Con la tecnología de Blogger.