Noticias

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

Recorrer huesos

Iniciado por Daniel Moreno, Abril 21, 2017, 01:45:26 PM

Tema anterior - Siguiente tema
Hola buenas necesito recorrer los huesos de un character para cambiarlo por un ragdoll en la misma posicion, mi problema es que este character tiene muchos hijos y estos hijos a su vez tienen mas hijos, se recorrer todos los hijos de un gameobject pero no se como hacer que si ese hijo tiene a su vez mas hijos tambien los coja.
 
Si alguien sabe como hacerlo se lo agradecería.

HOla, estoy seguro que hay una mejor forma pero podrias verificar si tiene hijos, si lo tiene tomarlo o guardarlo de la forma que quieras y a su vez reverificar si este tiene, is tiene guardarlo y verificar si este ultimo tiene, y asi de manera recuersiva para todos los hijos.
 
Podrias tener algo asi, (recontra Ojo ni se si esto es un desastre lo hice medio al boleo jaja)
 

List<Transform> listaHijos = new List<Transform>();
 
void ObtenerTodosLosHijos(Transform padre)
{
     //antes de agregarlo a tu lista podes filtra la seleccion de la manera que quieras
listaHijos.Add(padre);
 
if(padre.childCount > 0)
        foreach(Transform child in padre)
           ObtenerTodosLosHijos(child);
}
 
void OnEnable()
{
foreach(Transform child in transform)
        ObtenerTodosLosHijos(child);
 
}

 
salu2

Abril 22, 2017, 01:22:22 AM #2 Ultima modificación: Abril 22, 2017, 01:44:32 AM por Daniel Moreno
Cita de: lightbug date=1492777621HOla, estoy seguro que hay una mejor forma pero podrias verificar si tiene hijos, si lo tiene tomarlo o guardarlo de la forma que quieras y a su vez reverificar si este tiene, is tiene guardarlo y verificar si este ultimo tiene, y asi de manera recuersiva para todos los hijos.
   
   
      Podrias tener algo asi, (recontra Ojo ni se si esto es un desastre lo hice medio al boleo jaja)
   
   

List<Transform> listaHijos = new List<Transform>();
 
void ObtenerTodosLosHijos(Transform padre)
{
     //antes de agregarlo a tu lista podes filtra la seleccion de la manera que quieras
listaHijos.Add(padre);
 
if(padre.childCount > 0)
        foreach(Transform child in padre)
           ObtenerTodosLosHijos(child);
}
 
void OnEnable()
{
foreach(Transform child in transform)
        ObtenerTodosLosHijos(child);
 
}

   
      salu2
   


Muchas gracias por la respuesta, no sabía que podía llamar a una función dentro de esta misma, intentaré hacerlo.
 
Acabo de intentarlo y funciona perfectamente, lo he retocado un poco pero la esencia es esa. Muchas gracias

Ah bueno saberlo no estaba seguro si andaba, creo que el if antes de foreach tambien lo podrias sacar,
 
Cita de: Daniel Moreno date=1492816942no sabía que podía llamar a una función dentro de esta misma
   


si se llama recursividad es muy util en casos asi.
 
un saludo

Etiquetas: