Dans ce tuto, nous allons exploiter le système de "zones de déclencheurs" afin d'activer des animations du décors. Sur le même principe, nous verrons qu'il aussi possible d'activer / désactiver des objets.
Ce qu'il faut comprendre, c'est qu'une fois qu'on mis en place un déclencheur, il va pouvoir nous servir à tout un tas de choses ! Tout ce que l'on veut !
Placer une zone déclencheur dans Unity consiste à créer un Empty composé d'un Collider configuré en Trigger (déclencheur).
Un script doit être attaché à l'empty afin qu'il réagisse lorsqu'il détecte quelque chose.
L'idée :
- Lorsque le collider 1 repère le joueur, il rend visible la plateforme à sa gauche, jusque-là invisible. Ceci permettant au joueur d'accéder au collider 2....
- Lorsque le collider 2 est touché par le joueur, celui-ci active l'animation de la plateforme à sa gauche, jusque-là immobile et inatteignable.
- Les colliders sont bien évidemment invisibles au joueur.
Voici le type d'arborescence que l'on va devoir créer :
Remarquez ici l'utilisation d'un Empty qui nous servira de conteneur globale de notre système.
Il contiendra la plateforme elle-même, en l’occurrence, un simple cube redimensionné et le système de repérage du joueur indépendant de la plateforme (au même niveau dans la hiérarchie).
Procédez comme suit :
Et voilà, avec tout cela en place, notre base est prête !
Analysons ce qu'il doit concrètement se passer :
Ceci sous-entend que le gameobject qui est équipé du collider doit "être intelligent" : c'est lui qui va surveiller et repérer le joueur ; et c'est aussi lui qui fera réapparaître la plateforme. C'est donc lui qui doit s'occuper de la faire disparaître.
Conclusion : le gameobject déclencheur doit adopter certains comportements. Il doit donc être équipé d'un script.
Identifions ce dont on va avoir besoin, en termes de fonctions Unity.
Nous allons avoir besoin de la fonction GameObject.SetActive.
Voici le lien vers la documentation de Unity.
1 2 3 4 5 |
//Activer un gameObject gameObject.SetActive(true); //Désactiver un gameObject gameObject.SetActive(false); |
Ce qui sous-entend que le script doit connaître le gameObject à activer/désactiver : nécessité d'une variable pointant vers notre plateforme.
Nous allons avoir besoin de la fonction Collider.OnTriggerEnter(Collider)
Voici le lien vers la documentation de Unity.
1 2 3 4 5 |
void OnTriggerEnter ( Collider col ) { //Si le collider touché est celui du joueur //Faire apparaître la plateforme } |
Voilà, vous avez tous les outils pour éditer le script de gestion de la plateforme ! :)
Je vous invite à vous y essayer sans aller plus loin. Et seulement si vraiment vous n'y arrivez pas, à regarder la suite.
Voici ce qu'il doit se passer dans le script :
1 2 3 4 5 6 7 8 9 10 |
void Start () { //Faire disparaître la plateforme } void OnTriggerEnter ( Collider col ) { //Si le collider touché est celui du joueur //Faire apparaître la plateforme } |
Remarquez qu'il n'y a pas besoin de grand chose, en fin de compte ^^
Allez, voyons ensemble :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using UnityEngine; public class HiddenObject : MonoBehaviour { public GameObject plateforme; //Référence à la plateforme void Start () { plateforme.SetActive ( false ); //Désactivation de la plateforme } void OnTriggerEnter ( Collider col ) { //Si le tag du gameObject du collider touché est égale à "Player" if ( col.tag == "Player" ) { plateforme.SetActive ( true ); //Activation de la plateforme } } } |
Remarque : J'utilise ici le tag "Player" pour repérer si c'est bien l'objet du joueur qui entre en contact.
Nous pourrions aussi utiliser le nom du gameObject :
1 2 |
//Si le nom du gameObject du collider touché est égale à "NomDuGameObjectPlayer" if ( col.name == "NomDuGameObjectPlayer" ) |
Maintenant que l'on a vu comment déclencher l'apparition d'un GameObject, quel qu'il soit, nous sommes en mesure de déclencher tout ce que l'on veut !
En effet, le principe restera toujours le même :
Mais... c'est ce petit "ce que l'on veut" qui risque de parfois poser problème. En effet, c'est là qu'il s'agit de connaître Unity, et d'une, pour savoir ce qu'il est possible de faire, et de deux, comment le faire.
Dites-vous déjà que quasiment tout ce que vous pouvez faire à la souris dans l'interface de Unity et faisable par le code.
Ex : Activer / Désactiver un GameObject (case à cocher de l'inspecteur).
Il s'agit après de connaître le code à utiliser pour le faire.
Dans l'exemple précédent : GameObject.SetActive()
Pour déclencher une animation par le code, la fonction à utiliser sera celle-ci :
Animation.Play()
Il faut savoir qu'en exécutant cette fonction tel-quel, le composant Animation lira le clip placé par défaut (entouré en rouge).
Notez que la case "Play Automatically" est décochée. En effet, nous ne voulons pas que l'animation se déclenche automatiquement puisque nous la déclencher seulement si le joueur entre dans la zone déterminée.
En reprenant le même genre de setup que le précédent ; plutôt que de faire apparaître un objet préalablement caché, vous allez pouvoir exécuter l'animation de n'importe quel gameObject en créant un script comme celui-ci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Ce script est à attacher sur le GameObject doté d'un collider //faisant office de déclencheur using UnityEngine; public class AnimatedObject : MonoBehaviour { public Animation animComponent; //Référence au composant Animation de la plateforme animée //Lorsque le collider entre en contact avec quelque chose void OnTriggerEnter ( Collider col ) { //Si le tag de l'objet contacté est égal à "Player" if ( col.tag == "Player" ) { animComponent.Play (); //Exécuter le clip d'animation placé par défaut. } } } |
Ce site a été conçu avec Jimdo. Inscrivez-vous gratuitement sur https://fr.jimdo.com