この質問がまだどこかで行われていないとは信じられません。かなり完全なグーグルは結果を出していない。 Unityのドキュメントには Behaviour.isActiveAndEnabled
フィールド:
動作が有効になっていたか。
動作が有効な場合はtrue、無効な場合はfalse。
そして、これは Behaviour.enabled
:
有効な動作は更新されますが、無効な動作は更新されません。
これは、動作のインスペクターで小さなチェックボックスとして表示されます。
したがって、1つの記事では、「有効」の意味が他の記事よりも詳しく説明されています。私の知る限り、これらのフィールドはまったく同じ条件下でtrue/falseです。違いは何ですか?いつどちらを使用しますか?明確化をいただければ幸いです!
isActiveAndEnabled
とenabled
は初心者には非常に混乱しているようで、ほとんどの人はまだ違いがわからないので、それぞれをいつ使用するかわかりません。私もその一人でした。
理解しておくべき2つのこと:
[〜#〜] a [〜#〜]。GameObjectsはアクティブ化できますおよびde-activated。
[〜#〜] b [〜#〜]。スクリプトはを有効にできますおよびdisabled。
isActiveAndEnabled
のキーワードですべてを説明できます。
各プロパティで何が起こるか:
1。_Behaviour.enabled
_の場合、これは真理値表です。
しないスクリプトがアタッチされているGameObject
がactivatedまたはdeactivated_Behaviour.enabled
_がtrueを返す重要なのは、GameObjectにアタッチされているスクリプトまたはコンポーネントが有効か無効かです。
2 ._Behaviour.isActiveAndEnabled
_の場合、これは真理値表です。
matters _Behaviour.isActiveAndEnabled
_がGameObject
を有効または無効にして、trueまたはfalseを返す場合。 _Behaviour.isActiveAndEnabled
_がtrue
を返すためには、bothスクリプト/コンポーネントがアタッチされているGameObjectがactiveおよびスクリプトがenabledである必要があります。これのいずれかがfalseの場合、_Behaviour.isActiveAndEnabled
_はfalse
を返します。
[〜#〜]編集[〜#〜]:
enabled
を取得し、isActiveAndEnabled
を取得しない場合はいつですか?
enabled
を使用して、スクリプトが有効/無効になっているかどうかを確認します。これを使用して、スクリプトを有効または無効にすることもできます。ゲームのロジックによっては、スクリプトを無効または有効にする場合があります。たとえば、GameObjectが画面に表示されなくなったが、Update()
関数で重い計算を実行しているスクリプトが1つアタッチされている場合、スクリプトを有効にして無効にし、後で有効にすることができます。 GameObjectが表示されます。
isActiveAndEnabled
は読み取り専用です。 bothスクリプトがenabled
であり、GameObjectが添付されているかどうかを確認するためにのみ使用できますactive
。あなたはできませんそれを使用してゲームオブジェクトを有効またはアクティブにします。
if (myScriptInstance.isActiveAndEnabled)
はif (myScriptInstance.gameObject.activeSelf && myScriptInstance.enabled)
の省略形ですが、isActiveAndEnabled
はコードを短くして読みやすくします。
GameObject.activeInHierarchyとBehaviour.enabledの間には、状態をチェックするために必要なすべての情報があります。
あんまり。これらは、Unityを使用するときに必ず必要となる非常に異なる変数です。 _GameObject.activeInHierarchy
_の用途が理解できないと思います。 GameObjectがアクティブかどうかを確認するには、_GameObject.activeSelf
_ではなく_GameObject.activeInHierarchy
_を使用します。 GameObjectをアクティブ化/非アクティブ化するには、GameObject.SetActive(true/false);
を使用します
.GameObject.activeInHierarchyとそれをいつ使用するか:
以下の表の場合、pObj =親GameObjectおよびcObj =子GameObjectそして、そのGameObject.activeInHierarchyが子ゲームオブジェクトで実行されています。
_GameObject.activeInHierarchy
_はisActiveAndEnabled
とほとんど同じです。それがtrue
であるかどうかは、2つの要因に依存します。親GameObjectがアクティブでなければなりません。チェックが実行されているGameObject(Child)もアクティブでなければなりません。これのいずれかがfalseの場合、_GameObject.activeInHierarchy
_はfalse
を返します。
_GameObject.activeInHierarchy
_を使用して、提供されたGameObjectがアクティブかどうかを確認し、同時にすべての親がアクティブかどうかを確認します。 GameObjectに親がない場合は、単に_GameObject.activeSelf
_を使用します。 _GameObject.activeSelf
_は、GameObjectがアクティブかどうかのみをチェックします。 _GameObject.activeInHierarchy
_のように親をチェックしません。
私はそれが誤解を招くものであることを知っています:
Behaviour.isActive And Enabled = Behaviorは有効にされていましたか。
ビヘイビアーを有効にするには、そのゲームオブジェクトがアクティブで、かつビヘイビアー自体が有効になっている必要があります。
Behaviour.enabled =有効な動作が更新されます
動作を更新するには、チェックボックスをオンにする必要があります。ただし、ゲームオブジェクトがアクティブでない場合は更新できないため、アタッチされた動作を更新できません。
動作.isActiveAndEnabled:コンポーネントが有効になっている&ゲームオブジェクトがアクティブ
動作.有効:コンポーネントが有効になっている&ゲームオブジェクトがアクティブまたは非アクティブになっている可能性がある
GameObject .activeSelf:ゲームオブジェクトがアクティブです
GameObject .activeInHierarchy:ゲームオブジェクトおよびそのすべての親はアクティブです
他の回答に加えて、IsActiveAndEnabledは、GameObjectがアクティブである(activeSelfなど)だけでなく、その階層でGameObjectがアクティブである(IsActiveInHierarchyなど)かどうかを確認するようです。これはUnityのドキュメントには書かれていません。以下は、すべての州の真理値表です。
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
| Component.enabled | GameObject.activeSelf | Parent GameObject.activeSelf | GameObject ActiveInHierarchy | Component isActiveAndEnabled |
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
| TRUE | TRUE | TRUE | TRUE | TRUE |
| FALSE | TRUE | TRUE | TRUE | FALSE |
| TRUE | FALSE | TRUE | FALSE | FALSE |
| FALSE | FALSE | TRUE | FALSE | FALSE |
| TRUE | TRUE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | FALSE | FALSE |
| TRUE | FALSE | FALSE | FALSE | FALSE |
| FALSE | FALSE | FALSE | FALSE | FALSE |
+-------------------+-----------------------+------------------------------+------------------------------+------------------------------+
Awakeイベントが呼び出されなかったときにisActiveAndEnabledがfalseであることに気付きました。