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

 こんにちはー!新入社員のタケです!


今日は必要になったのでプログラミングと格闘して、スクリプトを書いていました・・・!

プログラマーではないのですが、自分の中のプログラム力を振り絞って作ってみました。


まずどういったことを実現したいかというとPrefabを使ったオブジェクトのON/OFFを切り替えたい!というものです。

たとえばこの2つ並んだプレハブのテーブルセットの椅子だけを消したい…

けれどそれを一つのボタンで作ろうとすると椅子の数だけOnClickを設定しないといけないのですごい面倒くさい…


もちろんプレハブを解除すれば自由にヒエラルキーを移動できますが、これから机が増えることを考えるとできれば解除したくない…

デフォルトの機能ではここまでが限界だ…そこでスクリプトの出番なのです!


スクリプトを作る時はやりたいこととどうやったらできるかを考えてみましょう!

まずは…

やりたいこと→椅子だけを表示/非表示したい。

どうすればできるか→ヒエラルキーの椅子のデータだけを取得して、アクティブ状態を変更する。

という風に考えてみました。


今ある私の知識は、ボタンやトグルで使えるようにするためにはPublicのメソッドが必要ということぐらいです。

これがあるとボタンのイベントを設定する部分で表示されます。


でも高校生の時にはJavaやC++を触っていた私からしたらC#で使える関数とか何もわからないのでとにかくネットで調べます。

調べてみたところ椅子のデータだけ取得するには、どうやら"タグ"というものを付けてから同じタグのものを全部取得して、

次に配列に入れてグループ化っぽい感じにするみたいです。

このようなコードになりました。


まずはボタンで押して使えるようにPublicのメソッドを入れています。

そして最後の()の中にbool型の変数を入れることによりボタンを設定するときにチェックマークを使えるようになります。


GameObject[] ~~の行は「Chair」というタグがついたオブジェクトを全部取得するという意味です。

あらかじめ椅子のオブジェクトにはChairタグをつけておいたのでこれで取得できていますね。


最後の何も入っていないカッコの中に処理を入れていきます。

ひょっとしたらこのタグでグループ化した椅子をまとめて非アクティブ状態にしたら消えるのでは!?

という考えのもと下のようなプログラムをかきました。


オブジェクト配列名.Activeでアクティブのオンオフが制御できます。

そこに最初に作ったbool型のactiveを代入することにより、ボタン設定のチェックと同期が可能です。


これでボタンを押すと全部の椅子が消えてくれるはずだ…!

消えたぞーーー!!!!



よし、もう一度表示するか…

何ッ…!?表示できない…!?



ということころでしたけども…

いや~プログラミングって奥が深いですね。まさかあんな罠があったとはまだ知る由もない…


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

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

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

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

コメント