2015-12-07 4 views
2

Как видно из прилагаемого изображения, у меня есть активный игровой объект с несколькими дочерними элементами, но следующая простая стратегия возвращает значение null, предполагая, что его невозможно найти или достигнуть.Активный игровой объект не найден

Что я делаю неправильно? Мне просто нужно, чтобы захватить этот сустав и сделать некоторые изменения к нему ...

void Start() 
{ 
    GameObject brad = GameObject.Find("Brad"); 
    GameObject hip = brad.transform.Find("Brad/ChrBrad/CharacterRoot/JtRoot/JtPelvis").gameObject; 
} 

Сначала я использовал только GameObject hip = brad.transform.Find("JtPelvis").gameObject;, так что я подумал, что может быть проблемой, но даже после того, указав полный путь, он по-прежнему unfindable ?!

enter image description here

ответ

3

1) Transform.Find (не следует путать с GameObject.Find) ищет только один уровень вниз (не внуках), поэтому brad.transform.Find("JtPelvis").gameObject не работает;

2) Вы можете найти "JtPelvis" от полного пути, просто опустить "Бреду":

GameObject hip = brad.transform.Find("ChrBrad/CharacterRoot/JtRoot/JtPelvis").gameObject; 

3) Кроме того, вы всегда можете написать некоторые пользовательские функции поиска, например:

Transform FindChildNamed(Transform t, string name) { 
    if (t.name == name) return t; 
    foreach (Transform t1 in t) { 
     return FindChildNamed(t1, name); 
    } 
    return null; 
} 
//.... 
GameObject hip = FindChildNamed(brad.transform, "JtPelvis").gameObject; 
+0

Спасибо вам большое! – Joshua

Смежные вопросы