脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Unityのボタンのenabled/setActive/interactableの違い

UnityのuGUIを作成したときに、条件に応じてスクリプトから選択出来なくしたり、消したりしたい時が出てくると思いますが、その際に使う関数について
今回確認するのは

  • Button.enabled = true/false;
  • Button.interactable = true/false;
  • GameObject.setActive(true/false);

まずはuGUIからボタンを作成

f:id:portaltan:20160524142335p:plain

ステータスを変更するスクリプトの作成

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class buttonStatus : MonoBehaviour {
	Button buttonA;
	Button buttonB;
	Button buttonC;
	GameObject buttonD;

	// Use this for initialization
	void Start () {
		buttonA = GameObject.Find ("Canvas/ButtonA").GetComponent<Button> ();
		buttonB = GameObject.Find ("Canvas/ButtonB").GetComponent<Button> ();
		buttonC = GameObject.Find ("Canvas/ButtonD").GetComponent<Button> ();
		buttonD = GameObject.Find ("Canvas/ButtonC");
	}
	
	// Update is called once per frame
	void Update () {
		buttonB.enabled = false;
		buttonC.interactable = false;
		buttonD.SetActive (false);
	}
}

結果

f:id:portaltan:20160524143433p:plain

Buttonオブジェクトに対して

enabled
  • true/falseを代入することでステータス変更
  • falseにすると選択できなくなる
  • 見た目は変わらない
  • GameObjectには使えない
interactable
  • true/falseを代入することでステータス変更
  • falseにすると選択できなくなる
  • disabledステータスになり、見た目もグレーがかった半透明になる
  • GameObjectには使えない

GameObjectに対して

setActive
  • true/falseを引数にとることでステータス変更
  • falseにすると選択できなくなる
  • 表示自体が消える
  • ButtonObjectには使えない