【Unity】全ての子オブジェクトをGameObject[]型で取得する

全ての子オブジェクトをGameObject型で取得するサンプルです。
・すべての子オブジェクトを名前から検索する
・すべての子オブジェクトからコンポーネントを拾ってくる
・すべての子オブジェクトをTransform
型で拾ってくる
というのはネット上の記事に転がっていますが、今回はGameObject[]型で拾ってきます。
上記の方法についてはググれば出ると思います。

GameObject[] GetChildren(string parentName) {
        // 検索し、GameObject型に変換
        var parent = GameObject.Find(parentName) as GameObject;
        // 見つからなかったらreturn
        if(parent == null) return null;
        // 子のTransform[]を取り出す
        var transforms = parent.GetComponentsInChildren<Transform>();
        // 使いやすいようにtransformsからgameObjectを取り出す
        var gameObjects = from t in transforms select t.gameObject;
        // 配列に変換してreturn
        return gameObjects.ToArray();
}

例えば、UIを組む時にPanelの表示・非表示を切り替えたいときこのメソッドを使うとこんな感じで書けます。

var uiObjects = GetChildren("Panel");
foreach(var uiObject in uiObjects) uiObject.SetActive(false);

Panelの子を拾ってきて、SetActiveで表示・非表示を切り替えることができます。
uGUIで表示・非表示を切り替えるときどのパラメータをいじるのが適切なのか分かりませんが、とりあえずこれで実装可能


追記(2015/11/26) 読み返していて気づきましたが、一度SetActive(false);をしたあとにGameObject.Findを呼ぶと拾ってくれずにnullが返ってきます。よって、上の方法でUIの表示・非表示を切り替えるのはまずいです。注意してください(GameObject.Findで毎回親をさがすのでなく、親のインスタンスを変数で保持しておけば、あとは上の流れで大丈夫です)

【Unityで始める初めてのShader】ポストエフェクトの作り方3

shader3_2

記事に不備があった場合、未来の自分が直すと思います。
では、前回の続き。

前回は、フラグメントシェーダを定義し、そこでreturnしたカラーを画面に反映させることができました。カメラから取ってきた画面を加工するのが目的なので、カメラから映像を取ってきましょう。

まずは、一番最初に消したPropertiesを復活させます。Propertiesはシェーダ内の変数とUnity上の変数を結びつけるのに使用するものでしたね。

Properties {
        _MainTex("MainTex", 2D) = ""{}
}
続きを読む

【Unityで始める初めてのShader】ポストエフェクトの作り方2

shader2_2

前回の続きです。足りない情報は将来の自分が書き足してくれると思います。
PostEffect.shaderをいじっていきますよ。

まずはこんな感じにざっくりとコードを消して下さい。

Shader Custom/PostEffect {
    Properties {
        
    }
    SubShader {
        
    } 
    FallBack Diffuse;
}
続きを読む

【Unityで始める初めてのShader】ポストエフェクトの作り方1

shader1_2

はじめに

適当に書いておいて、後から分かりやすいように編集します。
さて、私はDXライブラリ、XNA、そしてUnityといろいろなツールでゲームなどを制作してきました。言語は異なっても普通のプログラムなら書けるのですが、シェーダ言語は何度も挫折しています。
そんな私がちょっとずつShaderを勉強していくエントリになります。このブログを見ながら一緒にShaderを勉強してくれる人がいたらうれしいです。

続きを読む