ハロー!新入社員のタケです!
今日は昨日の続きでプログラムを書いていきます!
前回はアクティブ状態を切り替えることで非表示にはできましたが、再表示ができなくなってしまいました…!
まず、これを解決するには昨日タグが付いたオブジェクトを取得するときに使ったFindGameObjectsWithTag関数が関係していました。
こちらの関数ですね!
FindGameObjectsWithTag("ここ")の中に入れたタグ名を取得して、foreachでGameObject配列に入れて…という感じです。
このFindGameObjectsWithTagですが、実は大きな罠がありまして…
なんと、アクティブじゃないオブジェクトからはタグが取得できないということでした!
ということは…昨日のプログラムをもう一度見てみましょう。
アクティブ状態をオフにしている…!
このプログラムだと…
①スイッチを入れる
↓
②Chairタグがついているオブジェクトを取得して、GameObject配列に入れていく
↓
③GameObject配列の中身を全部非アクティブ状態にする(これで椅子が非表示にできる)
↓
④もう一度スイッチを入れる
↓
⑤Chairタグが付いているオブジェクト…?ありませんでした!何もしません!(非アクティブ状態なので取得できない)
↓
⑥GameObject配列の中身は…何もないですね!終わり!(椅子は非表示のまま)
ということですね。
なので、椅子を非アクティブ状態にせずに椅子を消す必要があります。
モデルの描写を担っているMeshRendererコンポーネントだけ操作しましょう!
rendという変数にタグ付きのGameObject配列を入れてまとめてMeshRendererのコンポーネントを取得します。
rend.enableにactiveを代入することによってMeshRendererコンポーネントのアクティブをチェックで切り替えられるようにしました。
これで問題なく動くようになりました!やった~!
…
いや~~始めはGameObject配列の扱い方が難しくて全然できなくて…
でもこれができたらプレハブのオブジェクトを別の親子関係にあっても操作できるのでとても便利です!
また一つ賢くなった…!
コメント
コメントを投稿