強火で進め

このブログではプログラム関連の記事を中心に書いてます。

activeSelf と activeInHierarchy についての解説

※Unity 4.0から変更される内容の紹介です。

active プロパティが activeSelf に変更され、 activeInHierarchy が新たに追加されました。 activeSelf はリードオンリーなので設定する時は SetActive() を使用します。

その為、 active プロパティを使っているプログラムを Unity 4.0 で開くと以下の様なワーニングが表示されます。今のところワーニングですがそのうち古い書き方だと使えなくなる可能性も有るのでできる限り置き換えておきましょう。

warning CS0618: `UnityEngine.GameObject.active' is obsolete: `GameObject.active is obsolete. Use GameObject.SetActive(), GameObject.activeSelf or GameObject.activeInHierarchy.'

activeSelf は GameObject 自身がアクティブかどうかの値であり、そのGameObjectの親の activeSelf の状態の影響は受けません。

activeInHierarchy の場合は親の影響を受ける為、親の activeSelf が false で有った場合には false となります。その為、 activeInHierarchy の値は画面状態( activeInHierarchy が false の場合にはその GameObject は画面に表示されていない)を反映した値となっています。

例としてこの様な階層になってる時の CubeB の状態で説明します。

例1) CubeA の active の値を false にした場合。
[CubeBの値]

  • activeInHierarchy → false
  • activeSelf → true

例2) CubeB の active の値を false にした場合。
[CubeBの値]

  • activeInHierarchy → false
  • activeSelf → false

例1 の状態でも CubeB には Update イベントなどは発生しなくなる為、ほとんどの場合には activeInHierarchy だけをチェックしておけば良いでしょう。