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.

Ad debug output

The ad is displayed on the page

current post: Unity: Evitar collisiones, que un GameObject no colisione consigo mismo, ID: 2260

Ad: Anuncio2 (2573)
Placement: After Content 2 (after-content_2)

Display Conditions
general conditions
Adwp_the_query
term_id0
taxonomy0
is_main_query11
page01
numpages01
is_archive1
is_search1
is_home1
is_4041
is_attachment1
is_singular11
is_front_page1
is_feed1




Find solutions in the manual

Leave a Reply

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