Jump to content
Sign in to follow this  
Mcloud

Problema con colliders para atacar y recibir daño

Recommended Posts

Buenas, 

Estoy creando un juego tipo rol en 2D, tengo un personaje y un enemigo, cada uno con un tag distinto, "Player" y "Enemigo", ambos tienen 1 Rigidbody2D y 2 Colliders, luego tengo un circle Collider para el ataque, pero ese lo tengo en un objeto hijo, de esta manera

Enemigo.PNG

EL collider de ataque se sitúa según la dirección del personaje, hacia donde ataque, el colider grande es un trigger, el pequeño no, para que colisione y no pase con arboles y demas

rgb.PNG

En el colider de ataque tengo un script 

attak.PNG

En el script Attack simplemente hago lo siguiente:

void OnTriggerEnter2D (Collider2D col) {
       
        print("entra:"+col);
        if (col.tag == "Player")
        {
            print("entra a daño de Player");            

        }
        if (col.tag == "Enemigo")
        {
            print("entra a daño de enemigo");
            
        }
    }
    private void OnTriggerStay2D(Collider2D collision)
    {
        print("se queda:"+collision);
    }

El collider de ataque se activa y desactiva en un intervalo de tiempo, si mi ataque dura 1 segundo el colider se activa entre 0.20 y 0.80, esto me funciona bien.

Lo que no consigo es que se detecte la colision, no se porque, no me pinta nada en la salida, si dejo a mi personaje quieto y el enemigo viene y me ataca no se detecta la colision, si en ese momento muevo a mi personaje si se detecta....hago algo mal? no seria la forma adecuada de hacerlo?

 

Muchas gracias

Share this post


Link to post
Share on other sites
1 hour ago, Mcloud said:

Lo que no consigo es que se detecte la colision, no se porque, no me pinta nada en la salida, si dejo a mi personaje quieto y el enemigo viene y me ataca no se detecta la colision, si en ese momento muevo a mi personaje si se detecta....hago algo mal? no seria la forma adecuada de hacerlo?

Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.

Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.

Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.

 

Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.

 

Share this post


Link to post
Share on other sites
hace 4 horas, lightbug said:

Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.

Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.

Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.

 

Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.

 

Muchas gracias, voy a probarlo!!

Share this post


Link to post
Share on other sites

@Mcloud Llevas sin presentarte desde tu registro del 22 de Mayo... Por lo menos, preséntate en la Comunidad, por favor...

Share this post


Link to post
Share on other sites
1 hour ago, pioj said:

@Mcloud Llevas sin presentarte desde tu registro del 22 de Mayo... Por lo menos, preséntate en la Comunidad, por favor...

Mis disculpas

 

Share this post


Link to post
Share on other sites
On 27/6/2018 at 20:00, lightbug said:

Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.

Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.

Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.

 

Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.

 

Buenas, 

Ha costado, sobre todo porque no he podido dedicarle mucho tiempo, pero funciona como dices, he puesto el colider en un gameobject hijo, separandolo del principal, y con el 1 script sencillito que controla quien entra, y fenomeno oye, mil gracias!

Share this post


Link to post
Share on other sites
6 hours ago, Mcloud said:

Buenas, 

Ha costado, sobre todo porque no he podido dedicarle mucho tiempo, pero funciona como dices, he puesto el colider en un gameobject hijo, separandolo del principal, y con el 1 script sencillito que controla quien entra, y fenomeno oye, mil gracias!

:96_ok_hand::91_thumbsup:

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...