MRが楽しい

MRやVRについて学習したことを書き残す

Unityでオブジェクトやコンポーネントのアクティブ状態をチェックする

本日はUnityの小ネタ枠です。
Unityでオブジェクトやコンポーネントのアクティブ状態をチェックする方法です。

オブジェクトやコンポーネントのアクティブ状態をチェックする

MonoBehaviourからオブジェクトやコンポーネントのアクティブ状態をチェックするには以下のいくつかのプロパティが利用できます。

プロパティ名 説明
activeInHierarchy ヒエラルキーにおける自身のオブジェクトの有効無効状態を取得する
activeSelf 自身のオブジェクト自体の有効無効の切り替え状態を取得する
isActiveAndEnabled コンポーネントの動作の有効無効状態を取得する
enabled コンポーネント自体の有効無効の切り替え状態を取得する

docs.unity3d.com
docs.unity3d.com

各プロパティの動作

以下のサンプルスクリプトを使って状況ごとの戻り値を確認してみます。
・ActiveTest.cs

using UnityEngine;

public class ActiveTest : MonoBehaviour
{
    private void Update()
    {
        // コンポーネントのチェックボックスを表示するためUpdate関数を記述
    }

    [ContextMenu("ActiveCheck")]
    public void ActiveCheck()
    {
        // 様々なパターンのアクティブ状態を確認する
        
        // 1. 自身のゲームオブジェクトのアクティブ状態を確認する
        Debug.Log("自身のゲームオブジェクトのアクティブ状態: " + gameObject.activeInHierarchy);
        
        // 2. 自身のゲームオブジェクト自身のチェックボックスのアクティブ状態を確認する
        Debug.Log("自身のゲームオブジェクト自身のチェックボックスのアクティブ状態: " + gameObject.activeSelf);
        
        // 3. 自身のコンポーネントのアクティブ状態を確認する
        Debug.Log("自身のコンポーネントのアクティブ状態: " + this.isActiveAndEnabled);
        
        // 4. 自身のコンポーネント自身のチェックボックスのアクティブ状態を確認する
        Debug.Log("自身のコンポーネント自身のチェックボックスのアクティブ状態: " + this.enabled);
    }
}

全てのチェックボックスが有効の場合

オブジェクトとコンポーネント全てが有効な場合は全てTrueが返ります。

プロパティ名 結果
activeInHierarchy True
activeSelf True
isActiveAndEnabled True
enabled True


コンポーネントチェックボックスが無効の場合

コンポーネントのみチェックを外した場合、コンポーネントの関連のisActiveAndEnabled,enabled両方でFalseが返ります。

プロパティ名 結果
activeInHierarchy True
activeSelf True
isActiveAndEnabled False
enabled False


オブジェクトのチェックボックスが無効の場合

オブジェクトのみチェックを外した場合、オブジェクトの関連のactiveInHierarchy,activeSelf両方でFalseが返ります。
またコンポーネントの動作自体も無効化されるため、isActiveAndEnabledはFalseが返ります。

プロパティ名 結果
activeInHierarchy False
activeSelf False
isActiveAndEnabled False
enabled True


親オブジェクトのチェックボックスが無効の場合

オブジェクトのみチェックを外した場合、オブジェクトのactiveInHierarchyとコンポーネントのisActiveAndEnabledでFalseが返ります。
チェックボックス自体はチェックが入っているため、activeSelfとenabledの両方はTrueが返ります。

プロパティ名 結果
activeInHierarchy False
activeSelf True
isActiveAndEnabled False
enabled True