メインコンテンツまでスキップ

activeInHierarchy

gameObject.activeInHierarchygameObject.activeSelf はどちらもオブジェクトの有効状態を確認するプロパティですが、使い方や意味合いが異なります。






gameObject.activeSelf

  • 意味:
    現在の GameObject 自体が有効(アクティブ)かどうかを示します。

  • 効果: gameObject.SetActive(true) または gameObject.SetActive(false) によって直接変更されるのはこのプロパティです。

  • :
    gameObject.activeSelffalse なら、このオブジェクトはシーン内で無効になっており、子オブジェクトも無効になります。



gameObject.activeInHierarchy

  • 意味:
    GameObject がヒエラルキー内で有効(アクティブ)かどうかを示します。

  • 効果:
    自分や親のどれかが無効であれば、このプロパティは false になります。

  • :
    親オブジェクトが無効 (SetActive(false)) になっている場合、その子オブジェクトは activeSelftrue でも activeInHierarchyfalse になります。






使い分けの例

例えば、以下のような状況を考えてみます。

ParentObject (SetActive: false)
└── ChildObject (SetActive: true)
  • ParentObject の場合:

    • activeSelf: false (自身が無効化されている)
    • activeInHierarchy: false (ヒエラルキー内で無効)
  • ChildObject の場合:

    • activeSelf: true (自身は有効化されている)
    • activeInHierarchy: false (親が無効なのでヒエラルキー内で無効)


どちらを使うべきか

  • 特定のオブジェクト自体の有効状態のみを確認したい場合は activeSelf を使います。

  • シーン内で実際に表示されるかや動作するかを確認したい場合は activeInHierarchy を使います。






void CheckGameObjectStatus(GameObject obj)
{
if (obj.activeSelf)
{
Debug.Log($"{obj.name} は自分自身がアクティブです。");
}
else
{
Debug.Log($"{obj.name} は自分自身が非アクティブです。");
}

if (obj.activeInHierarchy)
{
Debug.Log($"{obj.name} はヒエラルキー内でアクティブです。");
}
else
{
Debug.Log($"{obj.name} はヒエラルキー内で非アクティブです。");
}
}