【Unity】プレハブに含まれるオブジェクトを消すプログラムを書いてみた!(2/2)

 ハロー!新入社員のタケです!


今日は昨日の続きでプログラムを書いていきます!

前回はアクティブ状態を切り替えることで非表示にはできましたが、再表示ができなくなってしまいました…!




まず、これを解決するには昨日タグが付いたオブジェクトを取得するときに使ったFindGameObjectsWithTag関数が関係していました。

こちらの関数ですね!



FindGameObjectsWithTag("ここ")の中に入れたタグ名を取得して、foreachでGameObject配列に入れて…という感じです。


このFindGameObjectsWithTagですが、実は大きな罠がありまして…

なんと、アクティブじゃないオブジェクトからはタグが取得できないということでした!


ということは…昨日のプログラムをもう一度見てみましょう。


アクティブ状態をオフにしている…!

このプログラムだと…


①スイッチを入れる

②Chairタグがついているオブジェクトを取得して、GameObject配列に入れていく

③GameObject配列の中身を全部非アクティブ状態にする(これで椅子が非表示にできる)

④もう一度スイッチを入れる

⑤Chairタグが付いているオブジェクト…?ありませんでした!何もしません!(非アクティブ状態なので取得できない)

⑥GameObject配列の中身は…何もないですね!終わり!(椅子は非表示のまま)


ということですね。


なので、椅子を非アクティブ状態にせずに椅子を消す必要があります。

モデルの描写を担っているMeshRendererコンポーネントだけ操作しましょう!


rendという変数にタグ付きのGameObject配列を入れてまとめてMeshRendererのコンポーネントを取得します。

rend.enableにactiveを代入することによってMeshRendererコンポーネントのアクティブをチェックで切り替えられるようにしました。


これで問題なく動くようになりました!やった~!



いや~~始めはGameObject配列の扱い方が難しくて全然できなくて…

でもこれができたらプレハブのオブジェクトを別の親子関係にあっても操作できるのでとても便利です!

また一つ賢くなった…!


--------------------------------------------------------------------------------

シェルパでは、3DCGや建築パースはもちろん
VRやARアプリの開発も行っています!
新しいことに興味のある方はきっと楽しめると思います!
新人研修も充実していて初心者でも3DCG経験者でも安心!

株式会社シェルパ
【福岡本社】
〒810-0042 福岡県福岡市中央区赤坂1丁目13-10赤坂有楽ビル7F 
【東京オフィス】
 〒101-0041 東京都千代田区神田須田町2丁目13-1YKS黒田ビル5F
TEL 092-717-6800 / FAX 092-717-6801

--------------------------------------------------------------------------------

コメント