Noticias

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

Acceder al Tag de un objeto HIJO

Iniciado por Jony, Enero 21, 2017, 02:02:44 AM

Tema anterior - Siguiente tema
Tengo un objeto Player y dentro un objeto hijo brazo.
 
Con un OnCollisionEnter2D y intento compara mediante if,  los tag de collision.transform.tag que es el objeto que colisiona y por otro lado necesito que me detecte el tag del objeto hijo brazo, pero siempre me detecta el tag del objeto Player.
 
Alguna ayuda por favor... :)
 
 
 
Un saludo

Hola, mira lo que te pasa se puede deber a muchos factores, no tengo idea como esta compuesto el Player, que collider tiene o que es (torso, cuerpo completo?). Si el collider de tu player es mas grande (o contiene, mejor dicho) al collider del brazo nunca devolverá el tag del brazo, no se trata si es hijo o no, ya que devuelve un Collision2D, osea un conjunto de informacion que tiene el collider, puntos de contacto, velocidad, etc.
 
Ah o ser que al collider que tiene el oncollisionEnter2D no le importe el player, solo el brazo (lo debes setear en la matriz de colisiones)
 
Otra cosa, si lo que queres es que aunque colisiones con el player acceder manualmente al brazo (sin necesidad que éste colisione) podes hacer:
 

collision.transform.Find("Brazo").tag

 
Aunque me parece que lo que queres hacer es detectar el brazo directamente, me supongo un shooter o algo asi.
 
Igual seria mejor que subas mas informacion, que cosas tienen colliders, como esta compuesto el player y el colisionador, etc.
 
Saludos

Igual me explique mal.
 
Es un plataforma 2d. Tengo mi jugador que es un gameobject llamado player, con sus collider y demas, el player funciona correctamente es decir cuando tiene una colision con el enemigo el player de destruye. Y me matan.
 
Ahora dentro de ese gameObject tengo un gameObject hijo que es el brazo, con su collider desactivado y cuando apreto un boton activa el collider del brazo y pega un puñetazo y mata al enemigo.
 
El player tiene un script, y el brazo otro distinto. Con el brazo no tengo problema porque cojo el gameObject de el tag y es brazo, pero en el script del player necesito hacer un if q me detecte que brazo y player son distintos porque sino siempre que pego puñetazo me matan al jugador. (Si no que pongo alguna condicion falsa para probar el script brazo).
 
Si no pego puñetazo esta bien porque debe matar al jugador. 
 
Por eso me gustaria decir algo asi: 
 
El collision.transform.tag == "enemigo" y el otro que colisiona en este caso gameObject.tag == "brazo"  que fuera cierta. Pero ese gameObject.tag siempre es el Padre Player. 
 
 
 
Espero q se haiga entendido.
 
 
 
Gracias crack. Un saludo
 
 

SOLUCIONADO!!!!
 
Al fin... jajajaja
 
No puedo acceder al tag de un objeto hijo pues lo que he hecho es lo siguiente:
 
Me creado un GameObject del objeto hijo brazo. Como este brazo su collider2d se activa y desactiva segun pegamos el puñetazo he accedido mediante el nuevo gameObject brazo a su componente collider y compruebo si esta activo o no.
 
En el if he puesto lo siguiente: 
 

if(obj.transform.name == "cuerpoEnemigo" && brazo.GetComponent<Collider2D>().enabled == false){
     print("funciona")
}

 
 
 
Donde obj es el objeto que hace la colision.

Ok. Lo que te recomendaria, o por lo menos si yo tuviera que hacer algo asi dividiria tres capas fundamentales (no tags porque las capas involucran deteccion de colisiones): Player, Enemigo y Brazo(ja no se me ocurrio ningun nombre mejor  )
 
Lo siguiente es plantear la matriz de colisiones (Edit/ProjectSettings/Physics2D.... creo). En resumen te interesa:
 
- Player-Enemigo (para la muerte del player)
 
- Brazo-Enemigo (para la muerte del enemigo)
 
Podrias tener un script en el brazo con el OnCollisionEnter()... , de arriba fijate que el brazo solo detectaria al enemigo, es decir que si se mete ni siquiera tenes que preguntar por tags ni nada de eso. Y tambien uno en los enemigos, cuando esta collision ocurra solo sera el player quien la active, y lo matas.
 
 
 
Mientras estaba escribiendo arriba me di cuenta de algo jajaj. OnCollisionEnter funciona entre static collider/non-kinematic Rigidbody vs non-kinematic Rigidbody , es decir que si tu brazo o tu enemigo no son rigidbodies no kinematicos nunca se va a activar la colision. (Recuerdo que para hacer el truco en uno que debia ser kinematico tenia que ponerlo NO kinematico y ademas freezar posicion y rotacion). Quiza por esto te devolvia a tu Player y no al brazo.
 
Igual te recomiendo encararlo como esta arriba, y ademas de usar triggers en este caso, ya que Collision2D tiene bastante mas informacion de la que necesitas, encima te trae esos "problemas" como el que mencione en el parrafo anterior.
 
Saludos
 
 
 
Cita de: Jony date=1484998044SOLUCIONADO!!!!
   
   
      Al fin... jajajaja
   
   
      No puedo acceder al tag de un objeto hijo pues lo que he hecho es lo siguiente:
   
   
      Me creado un GameObject del objeto hijo brazo. Como este brazo su collider2d se activa y desactiva segun pegamos el puñetazo he accedido mediante el nuevo gameObject brazo a su componente collider y compruebo si esta activo o no.
   
   
      En el if he puesto lo siguiente: 
   
   

if(obj.transform.name == "cuerpoEnemigo" && brazo.GetComponent<Collider2D>().enabled == false){
     print("funciona")
}

   
       
   
   
      Donde obj es el objeto que hace la colision.
   


Ajaj no habia visto la respuesta, justo respondi por eso. No entendi bien cuando dijiste "Me creado un GameObject del objeto hijo brazo", osea creaste un GO vacio?

Cita de: lightbug date=1484998156Ok. Lo que te recomendaria, o por lo menos si yo tuviera que hacer algo asi dividiria tres capas fundamentales (no tags porque las capas involucran deteccion de colisiones): Player, Enemigo y Brazo(ja no se me ocurrio ningun nombre mejor  )
   
   
      Lo siguiente es plantear la matriz de colisiones (Edit/ProjectSettings/Physics2D.... creo). En resumen te interesa:
   
   
      - Player-Enemigo (para la muerte del player)
   
   
      - Brazo-Enemigo (para la muerte del enemigo)
   
   
      Podrias tener un script en el brazo con el OnCollisionEnter()... , de arriba fijate que el brazo solo detectaria al enemigo, es decir que si se mete ni siquiera tenes que preguntar por tags ni nada de eso. Y tambien uno en los enemigos, cuando esta collision ocurra solo sera el player quien la active, y lo matas.
   
   
       
   
   
      Mientras estaba escribiendo arriba me di cuenta de algo jajaj. OnCollisionEnter funciona entre static collider/non-kinematic Rigidbody vs non-kinematic Rigidbody , es decir que si tu brazo o tu enemigo no son rigidbodies no kinematicos nunca se va a activar la colision. (Recuerdo que para hacer el truco en uno que debia ser kinematico tenia que ponerlo NO kinematico y ademas freezar posicion y rotacion). Quiza por esto te devolvia a tu Player y no al brazo.
   
   
      Igual te recomiendo encararlo como esta arriba, y ademas de usar triggers en este caso, ya que Collision2D tiene bastante mas informacion de la que necesitas, encima te trae esos "problemas" como el que mencione en el parrafo anterior.
   
   
      Saludos
   
   
       
   
   
      Ajaj no habia visto la respuesta, justo respondi por eso. No entendi bien cuando dijiste "Me creado un GameObject del objeto hijo brazo", osea creaste un GO 
   


Dentro del script de player he creado o instanciado no se como decirlo jajaja, un GameObject de brazo. Asi puedo acceder al collider de ese GameObject brazo que era hijo del player.
 
 
 
Saludos y gracias

Etiquetas: