Я знаю, что он возвращает данные компоненты, найденные в иерархии родителя, но в каком порядке? Мне нужно знать, потому что я хочу использовать это для инициализации своих сценариев, и сначала мне нужно сначала инициализировать родителей, а потом детей (потому что нижние компоненты иерархии используют рассчитанные значения их прямых родителей).Unity - GetComponentsInChildren <T>() return order
1
A
ответ
3
Документация Unity для GetComponentsInChildren не гарантирует определенный порядок возврата - таким образом, даже если вы найдете детерминированный порядок в текущей версии, он может сломаться, когда Unity отправит новую сборку, которая изменит этот детерминированный порядок. Таким образом, вам нужно будет обеспечить гарантии родительской инициализации в вашем собственном коде. Один из способов сделать это были бы перебрать преобразование:
void InitializeHierarchy(Transform root)
{
var initializable = root.GetComponent<Initializable>();
if(initializable != null) initializable.Initialize();
foreach(Transform t in root)
{
if(t == root) continue; //make sure you don't initialize the existing transform
InitializeHierarchy(t); //initialize this Transform's children recursively
}
}
Примечания: это будет инициализировать прямые родитель, прежде чем прямые дети - однако он не будет инициализировать тетя/дяди перед племянницей/племянников.
Кроме того, GetComponentsInChildren получит только прямые дочерние объекты текущего объекта. Решение Lincoln доставит вам все компоненты вплоть до вашего гнездования. – Allen
@Allen от Unity 5.5.0f3 это не так - GetComponentsInChildren возвращает компоненты рекурсивно вниз по иерархии. –
Я стою исправлен, если OP не использует более старую версию, чем 5.5. Спасибо! – Allen