Unityでオブジェクトを隠す、再表示する方法/gameObject.SetActiveの使い方

man IT

gameObject.SetActiveをFalseに設定すると、対象のオブジェクトを非表示にすることが可能です。Trueにすれば再表示されます。

スポンサーリンク

成果物

sa4
接触したオブジェクトを隠したり、隠していたオブジェクトを再表示したりしてみます。

gameObject.SetActiveの使い方

オブジェクトを隠す
オブジェクト.SetActive(false);
※trueで再表示する
setactive1
例として、キツネのオブジェクトを動かし、コライダー同士が接触した時にイベントを起こしてみます。
ぶつかった相手(collision)に対し、gameObject.SetActive(false);を実行します。
setactive2
これをアタッチすると、
sa1
接触したオブジェクトを非表示にします。記述そのものはとても単純です。
setactive3
プレハブ化してたくさん置いてみました。
sa2
実行結果です。逆にthis.gameObject.SetActive(false);とすれば、衝突した瞬間にキツネが消滅します。

条件を満たすと表示

setactive5
応用編として、「最初からオブジェクトを隠しておいて、特定条件で表示」してみます。
とりあえずpngをひとつ追加しておいて、
setactive6
プレハブのうちひとつだけ、接触しても消えないようにします。名前を確認し、
setactive7
If文でその名前のオブジェクトだけ別の処理に振り分けます。
sa3
一度テストプレイし、指定したオブジェクトは接触しても消えない(=If文がちゃんと効いてる)ことを確認しておきます。
setactive8
再度スクリプトを開き、クラス名の下public GameObject 変数名;を記述します。
setactive9
これをやるとインスペクターのスクリプト名の下に変数名が表示されるようになるので、
setactive10
ヒエラルキーからさっき追加したオブジェクトをドラッグしてきてセットします。
setactive11
これで変数(この場合hideAndShow)はオブジェクトを代入した状態になりました。
Start内でこのオブジェクトをSetActive(false)して隠します。対象がオブジェクトの場合は、SetActiveの前のgameObjectは不要です。
setactive12
あとはIf文の中=特定のオブジェクトにぶつかった時だけSetActive(true)してやれば、
sa4
特定のオブジェクトに接触すると表示されるオブジェクトが完成します。
//Unity C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class クラス名 : MonoBehaviour
{
  //インスペクターでオブジェクトを代入
    public GameObject オブジェクトを代入する変数名;

  //変数に代入したオブジェクトを隠す
    void Start()
    {
        hideAndShow.SetActive(false);
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.name == "特定のオブジェクト名")
            {
      //変数に代入したオブジェクトを表示
            hideAndShow.SetActive(true);
        }
        else{ 
      //衝突したオブジェクトを隠す
            collision.gameObject.SetActive(false); 
            }
        
    }
}
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント