Unity SetActiveとenabledの違い


0.0 はじめに

GameObjectやコンポーネントのアクティブ、非アクティブ状態をスクリプトからコントロールするためによくつかうSetActiveとenabledの違いの説明です。

1.0 SetActiveの特徴

SetActiveはgameObject(オブジェクト)のアクティブ、非アクティブ化に使用します。
親オブジェクトを非アクティブにすると子オブジェクトも非アクティブになります。
gameObjectが非アクティブの場合はコンポーネントがアクティブになっていても何もイベントは動きません。

1.1 使い方

()内のtrue/falseでアクティブ、非アクティブ状態をコントロールします。

Test.cs
gameObject.SetActive(false); // gameObjectを非アクティブ化

👍ポイント
gameObjectが非アクティブだとGameObject.Find()関数でgameObjectを見つけることができません。

2.0 enabledの特徴

enabledはgameObjectにアタッチされているコンポーネントのアクティブ、非アクティブ化に使用します。

2.1 使い方

直接.enabledにtrueもしくはfalseを代入します。

Test.cs
gameObject.GetComponent<Image>().enabled = false; // gameObjectのImageコンポーネントを非アクティブ化

3.0 アクティブ、非アクティブの調べ方

gameObjectのアクティブ、非アクティブはactiveSelf と activeInHierarchy で調べることができます。

activeSelf:自身が有効であればTrueを返す。(親の非アクティブ化でHierarchy上で非アクティブとなっていても自身がアクティブならTure)
activeInHierarchy:親子関係に依存、親が非アクティブならFalseとなる。