Unityでオブジェクトを非表示にする方法とは?【初心者向けガイド】

unity

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; // 完全に透明にする

必要に応じて、interactableblocksRaycastsも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.enabled3Dモデル等処理は維持、見た目だけ非表示
CanvasGroupUIオブジェクトじゅうなんな制御が可能

どの方法を選ぶべきか迷った時のチェックポイント

  • オブジェクトの処理を止めたいか? → SetActive
  • 見た目だけ消したいか? → Renderer.enabled
  • UIで演出も加えたいか? → CanvasGroup

コメント

タイトルとURLをコピーしました