Activer des Objets

On peut vouloir activer ou désactiver des objets pour différentes raisons : la porte n’apparaît qu’une fois les conditions de victoires remplies, quand on récupère un objet cela en fait apparaître un autre, les objets apparaissent au bout d’un certain temps puis disparaissent pendant un temps, un message apparaît quand on est suffisamment près d’un objet… 

Attention : Ce n’est pas la même chose que créer un nouvel objet, ici l’objet est déjà sur la scène et reste présent et on le rend visible ou non. 

Faire Apparaitre ou Disparaitre des Objets

Principe du script

Dans l’inspecteur Unity on peut facilement activer (à gauche) ou désactiver (à droite) un objet :

Dans le code, on peut gérer cela avec la fonction SetActive(). Par exemple, quand le jeu se lance on désactive l’objet et lorsque l’on rentre en collision avec un autre objet celui-ci s’active.

Activer ou Déactiver un script ou un composant

Pour créer certains boost permanents ou encore débloquer des pouvoirs à des moments particuliers on peut vouloir activer ou désactiver certains composants. Par exemple, ici on va voir ce mécanisme pour pouvoir allumer ou éteindre une lumière avec la touche O.

Attention ici on active uniquement un script, une partie d’un objet, si tu veux désactiver tout l’objet tu peux regarder juste au dessus.

Principe du script

On récupère un script depuis l’interface de Unity avec une variable publique et quand on appuie sur une touche on l’active ou le désactive.

Pour l’exemple notre composant sera de type Light, on crée donc une variable de ce type. Pour ton script, utilise le type du composant de ton choix.

Ensuite on va vérifier si l’on appuie sur la touche choisie avec la fonction Input.GetKeyDown().

Tu peux aussi utiliser des collisions ou d’autres systèmes d’input selon tes envies.

 

Quand la touche est pressée on vérifie si la lumière est allumée, si elle est allumée alors on l’éteint sinon on l’allume.

On utilise la propriété enabled qui vaut vrai si le composant est activé et faux sinon.

 

 Une autre méthode consiste à utiliser l’opérateur non ! qui inverse la valeur d’un booléen.

Et voici le script final:

Certains composants ne peuvent pas être activés ou desactivés. Ils sont toujours actif si ils sont ajouté à l’objet (par exemple les Rigidbody)

Dans ce cas on va a la place activer ou desactiver une propriété précise du composant.

Soit on le récupère dans une variable, comme précedement, soit on utilise la ligne GetComponent pour recuperer le composant et changer ses propriétés. Si vous ne connaissez pas le nom d’une propriété il faudra demander à google et aux docs Unity!

Voici un petit exemple pour eteindre la gravitée d’un objet. Il suffit de mettre la ligne dans le script pour indiquer quand éteindre la gravité. Et bien sur avoir MonObjet en variable!

MonObjet.GetComponent<RigidBody>().useGravity = false;
Retour en haut