Je ne peux pas croire que cette question n'ait pas déjà été posée quelque part; un googling assez complet n'a donné aucun résultat. La documentation de Unity dit ceci à propos du champ Behaviour.isActiveAndEnabled
:
Est-ce que le comportement avait activé appelé.
Vrai lorsque le comportement est activé, faux lorsqu'il est désactivé.
Et il est dit ceci à propos de Behaviour.enabled
:
Les comportements activés sont mis à jour, désactivés Les comportements ne le sont pas.
Ceci apparaît comme la petite case à cocher dans l'inspecteur du comportement.
Donc, un article précise ce que "activé" signifie plus que l'autre. Autant que je sache, ces champs sont vrais/faux dans les mêmes conditions! Alors, quelle est la difference? Quand utiliseriez-vous l'un sur l'autre? Une clarification serait très appréciée!
isActiveAndEnabled
et enabled
semble très déroutant pour les débutants et je parie que la plupart des gens ne connaissent toujours pas la différence et quand utiliser chacun d'eux. J'étais l'une de ces personnes.
Deux choses à comprendre:
A. Les GameObjects peuvent être activés et désactivés.
B. Les scripts peuvent être activé et désactivé.
Le mot clé dans isActiveAndEnabled
devrait tout expliquer.
Qu'est-ce qui se passe avec chaque propriété:
1. Pour Behaviour.enabled
, il s'agit de la table de vérité:
Il n'a pasimporte si la variable GameObject
à laquelle le script est attaché est activée ou désactivée pour que Behaviour.enabled
renvoie vrai. Ce qui compte, c'est si le script ou le composant attaché GameObject est activé ou désactivé.
2. Pour Behaviour.isActiveAndEnabled
, il s'agit de la table de vérité:
Importesi GameObject
est activé ou désactivé par Behaviour.isActiveAndEnabled
afin de renvoyer true ou false. Pour que Behaviour.isActiveAndEnabled
renvoie true
, les deux le GameObject auquel le script/composant est lié doit être actif et le script doit être activé. Si l'une des deux est fausse, alors Behaviour.isActiveAndEnabled
renverra false
.
EDIT:
Quand voudriez-vous obtenir
enabled
et NONisActiveAndEnabled
?
Vous utilisez enabled
pour vérifier si un script est activé/désactivé. Vous pouvez également l'utiliser pour activer ou désactiver un script. En fonction de la logique de votre jeu, vous pouvez parfois activer/désactiver un script. Par exemple, lorsqu'un objet GameObject n'est plus visible à l'écran mais qu'un script lui est associé qui effectue un calcul lourd dans la fonction Update()
, vous pouvez désactiver ce script avec activé et le réactiver ultérieurement lorsque l'objet GameObject est visible.
isActiveAndEnabled
est en lecture seule. Vous ne pouvez l'utiliser que pour vérifier si les deux le script est enabled
et que GameObjectest attaché à active
. Vous ne pouvez pas l'utiliser pour activer ou activer GameObject.
if (myScriptInstance.isActiveAndEnabled)
est un raccourci pour if (myScriptInstance.gameObject.activeSelf && myScriptInstance.enabled)
mais isActiveAndEnabled
rend votre code plus court et plus facile à lire.
Entre GameObject.activeInHierarchy et Behaviour.enabled, vous disposez de toutes les informations nécessaires pour vérifier l'état.
Pas vraiment. Ce sont des variables très différentes dont vous aurez certainement besoin lors de l’utilisation de Unity. Je ne pense pas que vous compreniez à quoi sert GameObject.activeInHierarchy
. Pour vérifier si GameObject est actif ou non, utilisez GameObject.activeSelf
pas GameObject.activeInHierarchy
. Pour activer/désactiver GameObject, utilisez GameObject.SetActive(true/false);
3.GameObject.activeInHierarchy et quand l'utiliser:
Pour le tableau ci-dessous, pObj = GameObject parent et cObj = Child GameObject et que GameObject.activeInHierarchy est en cours d'exécution sur le Child GameObject.
GameObject.activeInHierarchy
est presque comme isActiveAndEnabled
. Cela dépend de deux choses pour que cela soit true
. Le GameObject parent doit être actif. Le GameObject (Child) sur lequel la vérification est en cours doit également être actif. Si l'une de ces valeurs est false, alors GameObject.activeInHierarchy
renverra false
.
Vous utilisez GameObject.activeInHierarchy
pour vérifier si le GameObject fourni est actif et en même temps pour vérifier si tous ses parents sont également actifs. Si le GameObject n'a pas de parent, utilisez simplement GameObject.activeSelf
. GameObject.activeSelf
vérifiera uniquement si GameObject est actif ou non. Il ne vérifiera pas le parent comme GameObject.activeInHierarchy
.
Je sais que c'est trompeur:
Behaviour.isActive Et Enabled = Le comportement a-t-il déjà été activé?.
Pour qu'un comportement ait activé enabled, son objet de jeu doit être actif ET le comportement lui-même doit être activé.
Behaviour.enabled = Les comportements activés sont mis à jour
Pour qu'un comportement soit mis à jour, la case à cocher doit être cochée. Cependant, si l'objet de jeu n'est pas actif, il ne peut pas être mis à jour et ses comportements attachés ne peuvent pas être mis à jour.
Comportement. isActiveAndEnabled: le composant est activé & l'objet de jeu est actif
Comportement. activé: le composant est activé & l'objet de jeu peut être actif ou désactivé
GameObject. activeSelf: - L'objet de jeu est actif
GameObject. activeInHierarchy: objet de jeu et tous ses parents sont actifs
J'ai remarqué que isActiveAndEnabled est false lorsque l'événement Awake n'a pas été appelé.