Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

[Duda] Diferenciar colliders

Iniciado por Null, Enero 23, 2017, 10:34:25 AM

Tema anterior - Siguiente tema
Hola!


Tengo una duda rápida...

Imaginemos que tengo un collider con el isTrigger activo, y que se lo he puesto a un GameObject en la cabeza.

Pero luego le pongo al mismo GameObject otro collider, también con el isTrigger activo, pero esta vez en la pierna...
 
Bueno, aquí empieza mi duda...

Dentro del OnTriggerEnter... cómo hago referencia al trigger de la cabeza sin que el de la pierna se vea afectado?

Cómo los distingo?
 
Thank you <3
 
 

Hola la unica forma de poder diferenciarlos es que sean diferentes, por ejempo el de la cabeza un boxcollider y el de la pierna un capsule. Y dentro del OnTriggerEnter decis obtenes el typo de collider
 

void OnTriggerEnter(Collider col)
{
if(GetComponent<BoxCollider>()){
      //Cabeza
      return;
    }
     
    if(GetComponent<CapsuleCollider>()){
      //Pierna
    }
}

 
Igual esto es cero recomendable, te conviene tener gameObjects separados con el colldier correspondiente asi podes ponerlos todos del mismo tipo si quisieras
 
Saludos

Enero 23, 2017, 12:08:57 PM #2 Ultima modificación: Enero 23, 2017, 12:09:30 PM por musaranya
Otra alternativa sería attachar Empty objects al objeto principal y attachar un box collider a cada empty (puedes cambiar la posición y tamaño de los colliders según convenga).
 
Por ejemplo, attachas un empty al muñeco principal como hijo de un bone de la cabeza (si es que el modelo tiene esqueleto). Luego le attachas al empty un box collider y lo dimensionas para que coincida con la cabeza del modelo. Al estar el empty emparentado con un hueso de la cabeza, al moverse esta también se moverá el collider. Y con el resto de miembros haces lo mismo. Entonces a cada empty le attachas un script para tratar el evento OnTriggerEnter. Ya puestos, yo haría que todos los OnTriggerEnter de los empties llamen a una función que esté en un script del objeto parent principal (el muñeco). Que llamen ahí diciendo qué parte del cuerpo ha sido alcanzada, así puedes centralizar toda la lógica de estos impactos en un único script. 
 
Como siempre, hay muchas maneras de hacer las cosas, todo depende del nivel de chapuza que estés dispuesto a aceptar :)
 
 
 
 
 
 
 
 
 
 

Cita de: lightbug date=1485164530Hola la unica forma de poder diferenciarlos es que sean diferentes, por ejempo el de la cabeza un boxcollider y el de la pierna un capsule. Y dentro del OnTriggerEnter decis obtenes el typo de collider
   
   

void OnTriggerEnter(Collider col)
{
if(GetComponent<BoxCollider>()){
      //Cabeza
      return;
    }
     
    if(GetComponent<CapsuleCollider>()){
      //Pierna
    }
}

   
      Igual esto es cero recomendable, te conviene tener gameObjects separados con el colldier correspondiente asi podes ponerlos todos del mismo tipo si quisieras
   
   
      Saludos
   


Muchísimas gracias por los consejos, lightbug.

Lo tengo muy en cuenta, de veras 
 
Voy a hacerlo de la manera que describe musaranya, entonces.
 
Cita de: musaranya date=1485169737Otra alternativa sería attachar Empty objects al objeto principal y attachar un box collider a cada empty (puedes cambiar la posición y tamaño de los colliders según convenga).
   
   
      Por ejemplo, attachas un empty al muñeco principal como hijo de un bone de la cabeza (si es que el modelo tiene esqueleto). Luego le attachas al empty un box collider y lo dimensionas para que coincida con la cabeza del modelo. Al estar el empty emparentado con un hueso de la cabeza, al moverse esta también se moverá el collider. Y con el resto de miembros haces lo mismo. Entonces a cada empty le attachas un script para tratar el evento OnTriggerEnter. Ya puestos, yo haría que todos los OnTriggerEnter de los empties llamen a una función que esté en un script del objeto parent principal (el muñeco). Que llamen ahí diciendo qué parte del cuerpo ha sido alcanzada, así puedes centralizar toda la lógica de estos impactos en un único script. 
   
   
      Como siempre, hay muchas maneras de hacer las cosas, todo depende del nivel de chapuza que estés dispuesto a aceptar :)
   
   
       
   
   
       
   
   
       
   
   
       
   
   
       
   


Y musaranya, muchísimas gracias a ti también!
 
Has dado en el clavo, te lo compro.

Es justo lo que voy a hacer luego cuando me baje la fiebre jajaja


Un saludo a ambos.

Enero 23, 2017, 12:25:00 PM #4 Ultima modificación: Enero 23, 2017, 12:51:08 PM por lightbug
Lo que dice musaranya es lo correcto, no lo hagas jamas como lo puse yo, es que pense que vos querias diferenciarlos dentro del OnTriggerEnter.
 
EDIT:
 
Ahora caigo que lo que puse arriba esta horrible, eso funcionaria (obteniendo el componente del collider col -> col.GetComponent blabla) si el script estuviera en el cuerpo que impacta y no en el impactado jaja.
 
 

Etiquetas: