gameObject.SetActiveをFalseに設定すると、対象のオブジェクトを非表示にすることが可能です。Trueにすれば再表示されます。
成果物
接触したオブジェクトを隠したり、隠していたオブジェクトを再表示したりしてみます。
gameObject.SetActiveの使い方
オブジェクトを隠す
オブジェクト.SetActive(false);
※trueで再表示する
オブジェクト.SetActive(false);
※trueで再表示する
例として、キツネのオブジェクトを動かし、コライダー同士が接触した時にイベントを起こしてみます。
ぶつかった相手(collision)に対し、gameObject.SetActive(false);を実行します。
ぶつかった相手(collision)に対し、gameObject.SetActive(false);を実行します。
これをアタッチすると、
接触したオブジェクトを非表示にします。記述そのものはとても単純です。
プレハブ化してたくさん置いてみました。
実行結果です。逆にthis.gameObject.SetActive(false);とすれば、衝突した瞬間にキツネが消滅します。
条件を満たすと表示
応用編として、「最初からオブジェクトを隠しておいて、特定条件で表示」してみます。
とりあえずpngをひとつ追加しておいて、
とりあえずpngをひとつ追加しておいて、
プレハブのうちひとつだけ、接触しても消えないようにします。名前を確認し、
If文でその名前のオブジェクトだけ別の処理に振り分けます。
一度テストプレイし、指定したオブジェクトは接触しても消えない(=If文がちゃんと効いてる)ことを確認しておきます。
再度スクリプトを開き、クラス名の下にpublic GameObject 変数名;を記述します。
これをやるとインスペクターのスクリプト名の下に変数名が表示されるようになるので、
ヒエラルキーからさっき追加したオブジェクトをドラッグしてきてセットします。
これで変数(この場合hideAndShow)はオブジェクトを代入した状態になりました。
Start内でこのオブジェクトをSetActive(false)して隠します。対象がオブジェクトの場合は、SetActiveの前のgameObjectは不要です。
Start内でこのオブジェクトをSetActive(false)して隠します。対象がオブジェクトの場合は、SetActiveの前のgameObjectは不要です。
あとはIf文の中=特定のオブジェクトにぶつかった時だけSetActive(true)してやれば、
特定のオブジェクトに接触すると表示されるオブジェクトが完成します。
//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の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント
[…] Unity でオブジェクトを隠す、再表示する方法/gameObject.SetActive の使い方 | すなぎつ […]