Developer

【初心者Unity】プログラムからGameObjectやComponentの有効無効を切り替える
2021.03.31
Lv1

【初心者Unity】プログラムからGameObjectやComponentの有効無効を切り替える

プログラムからGameObjectやComponentの有効無効を切り替える


今回はGameObjectやComponentの有効/無効をスクリプトから切り替える方法を紹介します。

そもそもプログラムを使わない切り替えであれば簡単で、InspectorからチェックのON/OFFだけで済みます。
GameObjectの切り替えは下図の赤○のチェック、Componentの切り替えは青○のチェックから行えます。

GameObjectを無効にした場合、そのGameObjectの描画やスクリプトなどすべての機能が停止します。(シーンに存在しない扱いとなる)
Componentを無効にした場合、そのComponentの機能だけが停止します。(上図で言うと、Box Colliderを無効にすると当たり判定がなくなります。Mesh Rendererを無効にすると描画だけされなくなります。)

しかし、当然ですがInspectorから切り替えられるのは開発中だけであるため、Inspectorからの切り替えというのはあくまでもGameObjectの初期状態を設定するものでしかありません。
もしゲームのプレイ中にこれらの切り替えを行うのであれば、C#プログラムで行う必要があります。

■プログラムからGameObjectの有効無効を切り替える


プログラムからGameObjectの有効無効の切り替えるにはGameObject.SetActiveメソッドを使用します。

using UnityEngine;

public class Sample : MonoBehaviour {

	public GameObject obj;

	void Start() {

		obj.SetActive(true);	// 有効にする

		obj.SetActive(false);	// 無効にする
	}
}

GameObject型の変数objには任意のGameObjectが代入されている(紐づいている)と仮定してください。
SetActiveメソッドはGameObject型の変数から呼び出せます。引数にbool型の値trueを渡すとGameObjectは有効になり、逆にfalseを渡せばGameObjectが無効となります。(無効となったときの挙動は↑に書いた通りです)

■プログラムからComponentの有効無効を切り替える


プログラムからComponentの有効無効を切り替えるにはenabledプロパティを使用します。
プロパティとはクラス内部ではメソッドの様に振舞い、外部からは変数のように扱えるという、C#特有の便利な仕組みです。(利用者側からすると意識せずとも変数と同じように使えるので、もしピンとこなければスルーしていただいて構いません。)

using UnityEngine;

public class Sample : MonoBehaviour {

	public BoxCollider bc;

	void Start() {

		bc.enabled = false;	// 無効にする

		bc.enabled = true;	// 有効にする
	}
}

BoxCollider型の変数bcには任意のBoxColliderが代入されている(紐づいている)と仮定してください。
enabledプロパティはComponent系の型から呼び出せます。bool型の値trueを代入とそのComponentが有効になり、逆にfalseを代入するとComponentが無効となります。(無効となったときの挙動は↑に書いた通りです)

■まとめ


実際にゲームを作っていると、GameObjectやComponentの有効無効を切り替える場面はけっこう多いです。
まずはGameObjectやComponentがプログラムからの切り替えが行えるということを覚えておき、必要になったらこの記事を参考にプログラムを書いてみてください。

 
 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次