オブジェクトを表示、非表示にする方法
Unityオブジェクトを表示したり非表示したりする方法には主に2種類あり、それぞれにメリット・デメリットがあります。その方法とは、オブジェクトのAlphaを0にする方法と、オブジェクトのActiveをfalseにする方法です。
GameObjectのAlphaを0にする
オブジェクトのAlphaを0にする場合、そのオブジェクトはScene上では存在し続けます。また、描画が透過されるだけなので、当たり判定などもそのままのこり、アタッチされているスクリプトも生き続けます。この場合のメリット・デメリットとしては、まさにこのSceneで生き続けることです。この方法は、本当に見た目だけ消したい時に使う方法です。
Alphaを0にする方法は、GameObjectでどのコンポーネントを使っているかによって方法が異なっているため、ここでは割愛します。
GameObjectを非アクティブにする
もう一つの方法としてはGameObject自体を非アクティブにする方法です。これは、Inspector上で一番上にあるチェックボックスのチェックを外すのと同じです。
コード上ではこのように書きます。非表示の場合はfalseを、表示させる場合はtrueを指定します。
1 |
gameObject.SetActive (false); |
この方法で非表示にした場合のメリットとしては、GameObjectは非アクティブ状態なので、一切のコンポーネントが動作しない状態となっており、Scene上からは検知できない状態になっているので、他のGameObjectに対して一切影響を及ぼさないとこです。しかし、それゆえに出てくるデメリットとしては、SetActive(false)を実行したGameObjectは、GameObject.Find()で検索して取得することが出来ないということです。ただし、Scene上から検知できないだけなので、実際にはScene上には存在しています。そのため、非アクティブ状態のGameObjectに対してアクセスするには、予めGameObjectを変数として保持しておくことでアクセスすることができ、また表示することが出来ます。
ちなみに、Scene上から完全に削除してしまうDestroy()メソッドを使用してしまうと、変数で保持していても削除されてしまっているのでそのGameObjectは使えません。
終わりに
オブジェクトを非表示にするときはその時の状況によってとる方法が変わりますが、だいたいの場合は非アクティブ状態にすることが多いと思います。ただし、メモリでずっと保持しているので、メモリの最適化をする場合は違う方法を選ぶときもあります。しかし、よっぽど使用できるメモリが少ない時や、保持しておかないといけないオブジェクトが多すぎる場合でない限りは、非アクティブにするだけで十分だと思います。
次回は、3Dモデルに対して物理演算を適用するようにするための方法を書いていこうと思います。
では、また。