46. CLASE MONOBEHAVIOUR (VI)








Seguimos con las funciones sobreescribibles.

OnMouseUp:

function OnMouseUp () : void


Esta función es llamada cuando el usuario libera/suelta el botón del ratón. Es llamada incluso si el mouse no está al soltar el botón sobre el mismo GUIElement o Collider en que estaba cuando el botón fue presionado. (Para que tuviera ese comportamiento habría que usar OnMouseUpAsButton, que vamos a examinar a continuación)


OnMouseUpAsButton:

function OnMouseUpAsButton () : void


Como anticipábamos en la función anterior, ésta es llamada sólo cuando el mouse es liberado estando sobre el mismo GUIElement o Collider en el que fue presionado.


OnMouseDrag:

function OnMouseDrag () : void


Es llamada esta función cuando el usuario presiona el botón del mouse sobre un GUIElement o un Collider y todavía lo mantiene presionado. Es llamada cada frame mientras el botón siga presionado.


OnTriggerEnter, OnTriggerExit, OnTriggerStay, OnCollisionEnter, On CollisionExit, OnCollisionStay:


Todas estas funciones ya fueron explicadas en la clase Collider, así que a la misma me remito.


OnControllerColliderHit:

function OnControllerColliderHit (hit : ControllerColliderHit) : void


Es llamada cuando nuestro character controller golpea un collider mientras realiza un movimiento, de tal manera que muchas veces esta función sirve para empujar objetos cuando colisionan con el personaje.

Hagamos unas modificaciones previas al pertinente ejemplo en la interfaz de Unity.

1.- Eliminamos el script vinculado a PortaScripts, para que no nos lance errores.
2.- Añadimos un CharacterController al cubo, reemplazando cuando nos lo pida
Unity el antiguo boxCollider.
3.- Desconectamos provisionalmente el boxCollider del gameobject Suelo, dado que
en caso contrario será el suelo el primer collider con el que se tope nuestra
función.
4.- Escribimos este script, que le vincularemos al cubo:



var miCharCon : CharacterController;
miCharCon = GetComponent(CharacterController);

function Update() {
miCharCon.Move(Vector3(1 * Time.deltaTime ,0,0));
}

function OnControllerColliderHit(teToco) {
teToco.rigidbody.AddForce(Vector3(0,0,50));
}


Play. Nuestro character controller (también conocido como cubo) avanza hacia la izquierda a razón de un metro por segundo, y cuando se topa con un controller (la esfera), algunos datos de la colisión y sus intervinientes son pasador al único parámetro de la función, que es de la clase ControllerColliderHit.

La clase ControllerColliderHit, aunque la veremos más en profundidad en otra lección, cuenta con una serie de variables, entre las que destacan:


controller: El character controller que golpea el collider (nuestro cubo en el
ejemplo)
collider: El collider que es golpeado por el character controller (la esfera,
aquí)
rigidbody: El rigidbody que ha sido golpeado por el character controller, si es
que el collider que golpeamos tiene rigidbody (en el ejemplo lo usamos
porque la esfera tiene rigidbody).
gameObject: El game object que ha sido golpeado por el character controller.
transform: El transform que ha sido golpeado por el controller.
point: El punto de impacto en coordenadas globales.
normal: El normal de la superficie que ha sido colisionado en coordenadas
globales.
moveDirection: Aproximadamente la dirección desde el centro de la cápsula del
character controller al punto que tocamos.
moveLength: La distancia que el character controller ha recorrido hasta golpear
con el collider.


Entonces, volviendo al ejemplo, a través del parámetro de tipo ControllerColliderHit que hemos dado en llamar teToco, accedemos a la variable rigidbody, que obviamente se corresponde con el rigidbody de la esfera, y a partir de ahí le asignamos un comportamiento, que en este caso es meramente desplazarse en el eje Z.



OnJointBreak:

function OnJointBreak (breakForce : float) : void

Esta función ya la explicamos en la lección correspondiente a la clase Joint.


OnParticleCollision:

function OnParticleCollision (other : GameObject) : void


Esta función es llamada cuando una partícula choca con un collider. Puede por tanto usarse para computar el daño recibido por un gameobject cuando choca con partículas. Este mensaje es enviado a todos los scripts vinculados con el WorldParticleCollider y al collider que fue colisionado. El mensaje es sólo enviado si habilitamos SendCollisionMessage en el inspector del WroldParticleCollider.

Quedémonos de momento con esta sucinta información, que ya trabajaremos cuando nos toque lidiar con la clase ParticleEmitter.

POSTED BY UnityScripts
DISCUSSION 1 Comment

One Response to : 46. CLASE MONOBEHAVIOUR (VI)

  1. Unknown says:

    Hola, estoy siguiendo tu tutorial y me esta ayudando muchisimo, estoy empezando ahora con esto del unity y la verdad que me viene de maravilla. Solo queria puntualizarte que cuando realizas los siguientes pasos para probar el OnControllerColliderHit:

    1.- Eliminamos el script vinculado a PortaScripts, para que no nos lance errores.
    2.- Añadimos un CharacterController al cubo, reemplazando cuando nos lo pida
    Unity el antiguo boxCollider.
    3.- Desconectamos provisionalmente el boxCollider del gameobject Suelo, dado que
    en caso contrario será el suelo el primer collider con el que se tope nuestra
    función.
    4.- Escribimos este script, que le vincularemos al cubo:

    Decirte que si no bloqueas en constraints, el eje Y de la esfera, al haber quitado el collider del suelo, esta caera al infinito. Nada mas decirte eso para que si lo quieres revisar, evitar posibles confusiones.
    Por lo demas, muchas gracias por tomarte la molestia de escribir un tutorial. Saludos!

Leave a Reply

Con la tecnología de Blogger.