miércoles, 27 de agosto de 2014

#Script Colisión o Collision GameObject #unity3d #javascript

La colisión o collision en #unity3d es la acción por la cual un gameobject u objeto choca con otro. Luego de este encuentro se puede indicar que el mismo desaparezca o que realice otra acción por ejemplo bajar vidas. ¿Pero como hacer para que se active la colisión cuando toca otro objeto y este no le cae encima?

Ejemplo tomado del sitio oficial de Unity3d - Sección Tutoriales.


En #unity así como existe el OnTriggerEnter para el ingreso en zonas sensibles, existe también el OnCollisionEnter. Este permite activar la acción cuando el elemento entre en contacto con otro. Pero deben tener en cuenta que esto solo funciona cuando el elemento que tiene el script cae y toca el otro. O por lo menos a mí solo me funciona de esa forma. 


Para lo cual he recolectado un video tutorial de Will Goldstone en el cual ejemplifica lo indicado.


En el ejemplo que vimos el cubo posee el script y se activa al chocar el cubo con el plano. El script que se usa en este video es el siguiente. La acción Debug.Log("mensaje"); sirve para enviar un mensaje por consola, en este caso para validar que el cubo toca el piso.


* JS
-------------------------------------------

function OnCollisionEnter (col : Collision)
{
    if(col.gameObject.name == "prop_powerCube")
    {
        Destroy(col.gameObject);
    }

}
-------------------------------------------


Pero que pasa si no queremos que la colisión se active cuando cae el objeto sobre el player sino cuando es tocado por el player o cuando este lo roza. Por ejemplo cuando un enemigo nos ataca.

Para solucionar este inconveniente debemos de usar el siguiente Script en JS o JavaScript para que al momento que el player toque un objeto este comience a enviar un mensaje. Por ejemplo si deseamos que cuando el player toque una pared esta le quite vidas, o para que cuando el enemigo colisione con el player este le quite vidas también.

* JS
-------------------------------------------

function OnControllerColliderHit ( hit:ControllerColliderHit  ){
if( hit.gameObject.tag == "Enemigos"){
Debug.Log ("me están matando");
}
}

-------------------------------------------

Con este script estamos indicando que cuando el Player colisione con el objeto de tag Enemigos se envíe el mensaje. Como observar en este caso quien posee el script es el Player y necesitar crear los tags necesarios para los enemigos, objetos u otros a usar.

Si no sabes como crear tags puedes revisar el siguiente link. 

5 comentarios:

  1. deverias de hacer un tuto de como crear una barra de vida y poder aumentar o disminuir con items

    ResponderEliminar
    Respuestas
    1. que tal estimado Bernando, te comento que en este blog si se encuentra un tutorial de ese tipo.
      Lo puedes revisar en este link:

      http://multimedia-blog-av.blogspot.com/2014/08/script-muestra-vida-unity3d-c.html

      Eliminar
  2. se podría usar para que cuando lo toque se reinicie o se salga del juego?

    ResponderEliminar
    Respuestas
    1. Estimado Kevin, si quieres usarlo para que cuando toque el juego se reinicie debes de poner lo siguiente:

      function OnControllerColliderHit ( hit:ControllerColliderHit ){
      if( hit.gameObject.tag == "Enemigos"){
      Application.LoadLevel ("nombre_nivel_a_reiniciar");
      }
      }

      Eliminar
  3. todavía no entiendo muy bien esto, pero me da error en
    ( hit:ControllerColliderHit )
    dice:Expected ';'

    ResponderEliminar