Unityでゲーム開発をしていると、「このオブジェクトを一時的に見えなくしたい」「スクリプトから表示・非表示を切り替えたい」と思う場面がよくあります。
とくにUIやキャラクターの演出などでは、オブジェクトの表示状態をじざいに操作することが欠かせません。
この記事では、Unityでオブジェクトを非表示にする方法をわかりやすく解説し、実践的な活用例まで紹介します。
Unityでオブジェクトを非表示にする基本方法

SetActiveを使った非表示化
Unityでは、オブジェクトを非表示にするもっとも基本的な方法は、SetActive(false)
を使うことです。これは、ゲームオブジェクトの「アクティブ状態」を変更するもので、以下のように記述します。
説明
gameObject.SetActive(false);
このコードを実行すると、対象のオブジェクトは画面上から完全に消え、Updateなどの処理も一時停止します。
実例:UIボタンを非表示にする
public GameObject myButton;
void Start() {
myButton.SetActive(false); // ボタンを非表示にする
}
ポイント
SetActive(false)
はオブジェクト全体を無効化します- 子オブジェクトもすべて非表示になります
- 物理演算やコライダーも同時に停止します
この方法はシンプルですが、使いどころをまちがえると処理にも影響します。
スクリプトの処理を続けたい場合は、次の方法を使いましょう。
見た目だけ非表示にしたいときはRendererを活用

Renderer.enabledを使った部分的非表示
オブジェクトを非表示にしたいけれど、スクリプトなどの処理は止めたくないというケースでは、Renderer.enabled = false
を使います。見た目だけを消すので、物理演算やスクリプトはそのまま動きます。
説明
GetComponent<Renderer>().enabled = false;
実例:敵キャラを透明にしてトラップ化
public GameObject enemy;
void Start() {
enemy.GetComponent<Renderer>().enabled = false; // 敵を見えなくする
// この状態でも当たり判定は残る
}
注意点
- 物理的には存在するので、当たり判定などは残ります
- UIにはこの方法は使えません(UIにはCanvasRendererが使われます)
- MeshRendererやSpriteRendererなど、種類によって取得方法がちがう場合があります
Rendererを使えば、ゲームオブジェクトを”透明なまま存在”させられます。
これはステルス系のゲームや、見えない床などを作る時に便利です。
UIオブジェクトを非表示にするには?
CanvasGroupを使ったUI制御
UIはSetActive(false)
が基本ですが、見た目だけを消したい場合はCanvasGroup
を使うのがスマートです。フェードイン・フェードアウトなどの演出にも最適です。
説明
GetComponent<CanvasGroup>().alpha = 0f; // 完全に透明にする
必要に応じて、interactable
やblocksRaycasts
もfalseにすることで、タッチ判定も無効化できます。
実例:ポップアップをふわっと消す演出
CanvasGroup cg = popupPanel.GetComponent<CanvasGroup>();
cg.alpha = 0f; // 透明にする
cg.interactable = false; // 操作を無効にする
cg.blocksRaycasts = false; // クリック判定を無効にする
補足
alpha
は0~1の間で設定可能- アニメーション的な表現にも最適
- DOTweenなどのアニメーションライブラリとの相性も抜群
UIは見た目・操作・判定の3点を同時に管理する必要があります。
CanvasGroupを使えば、これらを一括で制御できるので覚えておきましょう。
非表示にする際の注意点とコツ

よくある落とし穴
処理の継続について
- 非表示にしてもオブジェクトの
Update
が動いている場合がある(Renderer方式) SetActive(false)
にすると、子オブジェクトまで無効になるため、意図しない動作が起きることも
UI特有の問題
- UIでは非表示にしても
Raycast
が残ることがある - ImageやTextコンポーネントを直接いじると、予期しない表示になる場合がある
ベストプラクティス
用途別の使い分け
- 一時的に消す:Renderer や CanvasGroup
- 完全に消す:SetActive
- UIには専用の手法を使う:CanvasGroupを活用
パフォーマンスを考慮する
- 大量のオブジェクトを頻繁にSetActiveする場合は、ObjectPoolingパターンの利用を検討
- Rendererの無効化は描画処理を軽減できる
まとめ
Unityでオブジェクトを非表示にするには、目的に応じた方法を選ぶことが大切です。
方法 | 対象 | 特徴 |
---|---|---|
SetActive(false) | 全オブジェクト | 完全に無効化される |
Renderer.enabled | 3Dモデル等 | 処理は維持、見た目だけ非表示 |
CanvasGroup | UIオブジェクト | じゅうなんな制御が可能 |
どの方法を選ぶべきか迷った時のチェックポイント
- オブジェクトの処理を止めたいか? → SetActive
- 見た目だけ消したいか? → Renderer.enabled
- UIで演出も加えたいか? → CanvasGroup
コメント