2017-02-21 11 views
1

親の階層にある特定のコンポーネントを返すことは知っていますが、どのような順序で返されますか?私はスクリプトを初期化するためにこれを使いたいので、最初に親を初期化してから子供を初期化しなければならないので、知っておく必要があります(下位階層コンポーネントが直接親の計算値を使用するため)。Unity - GetComponentsInChildren ()返品のご注文

答えて

3

GetComponentsInChildrenのUnityドキュメントでは、特定の返品順序が保証されていないため、現在のバージョンで確定的な注文を見つけたとしても、Unityが決定的な順序を変更する新しいビルドを出荷するときに破損する可能性があります。したがって、あなた自身のコードで親の初期化を保証する必要があります。これを行う1つの方法は、変換を反復するために、次のようになります。

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 
    } 
} 

注:これは、直接の子の前に直接両親が初期化されます - それは叔母/叔父の前に姪/甥は初期化されませんが。

+0

また、GetComponentsInChildrenは、現在のオブジェクトの直接の子のみを取得します。リンカーンのソリューションは、あなたの巣を通ってすべてのコンポーネントをあなたに届けるでしょう。 – Allen

+0

@Allen Unity 5.5.0f3の場合 - GetComponentsInChildrenは、コンポーネントを再帰的に階層の下に返します。 –

+0

OPが5.5より古いバージョンを使用していない限り、私は修正されます。ありがとうございました! – Allen