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を配列に入れていけば、オブジェクト名の配列が作れます。

2011/11/15

Macbook Air で Unity 3D

だいぶ間が空いてしまったけど、少しずつ制作は進めています。Unity3Dを本格的に始めました。Shockwave3Dに夢中になっていた頃の感じに似た、新しい物に触れるワクワク感で、いい感じに進めることが出来ています。

Unityは、Macbook Airで使っています。
2011年モデル、11インチ、i5、SSD 128GBなので、一部で「竹」と呼ばれている構成です。
ポリゴン数が多くないせいか分からないけど、全く問題なく使えています。画面の解像度も特に狭いとも感じません。Airなので、家でも通勤中でも会社でもUnity出来るという…。
3DモデリングはMacbook Proで行い、UnityはMacbook Airで行う、という流れです。

Unity3Dにモデルをインポートして、マウスとキーボードでグリグリ回せるものを作ってみました。機関車と貨車、両方にリフレクションマップを追加して、機関車の方には窓とボディとでスペキュラーマスクを適用しています。マウスとキーボード、両方で回せるようにしたのは、(Unityに限らないけど)どうやら一度画面をクリックしてプラグインにフォーカスを合わせる(?)ようにしないと、ブラウザがUnity内に対してキーボードの操作を受け付けないからです。なので、キーボード操作のコンテンツを作る場合でも、何かしら、最初にクリックさせる仕掛けは必須だと思います。

出来上がったものはコチラ!