Jorge Vallejo Blog

Blog del creativo, ilustrador y profesor de videojuegos Jorge Vallejo

Unity: Evitar collisiones, que un GameObject no colisione consigo mismo

Muchas veces se nos va a presentar el caso , en el que un objeto que tiene un collider y un rigybody y que por lo tanto va a detectar colisiones, choca contra si mismo. Por ejemplo un misil que se dispara e interacciona con otro misil.
Suele un problema común que tiene dos soluciones:

1) Evitando la colisión a través de la matriz de físicas.
matriz_colisionSi vamos a Edit-> Proyect Settings Physics ya sea Physics o Physics2D dependiendo de si nuestro proyecto es 3D o 2D veremos al final una curiosa matriz, Layer Collision Matrix, esta formada por filas y columnas con los nombres de los Layers, si la intersección entre una fila y una columna esta marcada con un check, significa que al comparar dos elementos en colisión si tienen esos layer asociados habrá colisión y si no esta marcado no lo habrá.

Por lo tanto la solución para evitar que un objeto colisione consigo mismo es crear un nuevo Layer, seleccionando el objeto -> Layer->Add Layer tendremos que volver a dar a Layer y asignarle.
Si ahora vamos de nuevo a Edit-> Proyect Settings Physics veremos que el nuevo layer nos aparece en la matriz de colisión des chequeamos donde este su unión y listo.

matriz_colision2

2) Por código.
Tenemos un número limitado de Layers ya que son un int32, por lo que podria suceder que no quisieramos crear un nuevo layer para algun elemento. Afortunadamente Unity tiene tambien una solución para estos casos.
void OnCollisionEnter2D(Collision2D coll){

if (coll.gameObject.CompareTag ("Bola")) {
Physics2D.IgnoreCollision (coll.collider,gameObject.GetComponent());
}
}

En este caso Ignoramos la colisión al detectarla, con coll.collider accederíamos a uno de los elementos de la colisión y con gameObject.GetComponent() al elemento que tenga este script y que lleve asociado el BoxCollider2D
Espero que os haya sido útil ya que es un problema bastante común, si tenéis algún otro método , no dudéis en dejarme un comentario.

Leave a Reply

Your email address will not be published. Required fields are marked *