2011/11/16

GetComponentsInChildrenで子供オブジェクトを取得/操作する


覚えたてなので、間違っている部分もあるかもだけど、メモ的にエントリーにしておきます。
GetComponentsInChildrenを使うと親子階層を組んだ子供オブジェクトのコンポーネントを取得できます。子供オブジェクトを非表示にするには以下の記述で成功しました。

function Start () {
  var renderers = gameObject.GetComponentsInChildren( Renderer ); // 解説1
  //print ( renderers ); //解説2
  for ( var currentRenderer : Component in renderers ) { // 解説3
    if ( currentRenderer.renderer.enabled ) { // 解説4
      currentRenderer.renderer.enabled = false; // 解説5
    }
  }
}

>解説1
変数「renderers」に、スクリプトがアタッチされているオブジェクト自身の子供オブジェクトの「Renderer」コンポーネントを取得。配列の形となります。

>解説2
「print」すると内容がコンソールに出力されます。

>解説3
変数「currentRenderer」に、変数「renderers」の内容を入れます。
for文の、inを使った記述なので、配列になっている変数「renderers」の内容が繰り返し代入されていきます。

>解説4
もし、「currentRenderer」のrendererコンポーネントenabledがtrue(描画が有効)だったら…

>解説5
「currentRenderer」のrendererコンポーネントenabledをfalse(描画を無効)にする。

…という感じです。同じような感じで、

function Start(){
  var trans = gameObject.GetComponentsInChildren(Transform);
  for ( var ob : Component in trans ) {
    print(ob.name);
  }
}

と記述すると、オブジェクト名を1つずつ出力します。
ob.nameを配列に入れていけば、オブジェクト名の配列が作れます。

0 件のコメント:

コメントを投稿