Understanding Collision Detection in Unity

Ce document présente les principes fondamentaux de la détection des collisions dans Unity, en particulier l’utilisation des colliders en mode déclencheur (trigger). Il s’adresse aux étudiants en informatique ou en développement de jeux vidéo souhaitant comprendre comment gérer les interactions entre objets, afficher une interface graphique dynamique et contrôler l’accès à des zones du jeu.

D'après le document Understanding Collision Detection in Unity

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Understanding Collision Detection in Unity

Document source

Understanding Collision Detection in Unity

Programming, Game Development, Image Processing · PDF · 34 pages · 2012

Afficher l'aperçu du document

Consulter le document original →

Ce document présente les principes fondamentaux de la détection des collisions dans Unity, en particulier l’utilisation des colliders en mode déclencheur (trigger). Il s’adresse aux étudiants en informatique ou en développement de jeux vidéo souhaitant comprendre comment gérer les interactions entre objets, afficher une interface graphique dynamique et contrôler l’accès à des zones du jeu.

Détection des collisions avec les déclencheurs (Triggers)

Dans Unity, un déclencheur est un collider dont l’option Is Trigger est activée dans le panneau Inspector. Contrairement aux colliders classiques, les déclencheurs ne provoquent pas de collisions physiques mais détectent les interactions entre objets. Ils sont essentiels pour gérer des événements comme la collecte d’objets ou l’activation de mécanismes.

Création et préparation d’un élément préfabriqué (Prefab)

Pour illustrer la détection de collisions, on utilise un modèle 3D de pile (battery) importé dans Unity. Ce modèle est converti en élément préfabriqué, ce qui permet de créer plusieurs copies avec des paramètres identiques.

  • Importer le modèle 3D et les ressources associées (images de batterie, fichier audio).
  • Attribuer un tag à l’objet battery pour l’identifier dans les scripts.
  • Redimensionner l’objet en fixant la valeur Scale à 6 sur tous les axes dans le composant Transform.
  • Ajouter un composant Capsule Collider et activer l’option Is Trigger pour transformer le collider en déclencheur.

Exemple de script pour rotation de l’objet battery

var rotationAmount : float = 5.0;
function Update() {
  transform.Rotate(Vector3(0, rotationAmount, 0));
}

Ce script nommé rotateObject fait pivoter la pile autour de l’axe Y pour la rendre plus visible.

Placement des batteries dans la scène

Une fois le prefab prêt, on crée plusieurs exemplaires dans la scène, par exemple quatre batteries dispersées autour d’un avant-poste, que le joueur devra collecter.

Affichage de l’interface graphique (GUI) pour la collecte

Pour informer le joueur du nombre de piles collectées, on utilise un composant GUITexture affichant une image représentant la batterie. Cette image évolue selon la progression de la collecte :

  • Image de la pile vide au départ.
  • Images montrant la pile chargée à 1, 2, 3 puis 4 unités au fur et à mesure des collectes.

Création de l’objet GUI Texture

  • Importer la texture battery_nocharge dans le dossier textures.
  • Dans Unity, sélectionner cette texture puis créer un objet GUI Texture via GameObject > Create Other > GUI Texture.
  • Renommer l’objet créé en Battery GUI pour faciliter son identification.
  • Positionner l’objet sur l’écran en utilisant des coordonnées relatives (de 0 à 1) dans le composant Transform : X = 0,05 et Y = 0,2 pour le placer dans le coin inférieur gauche.

Contrôle dynamique de l’interface via script

Le script BatteryCollect est attaché à l’objet Battery GUI et gère la texture affichée en fonction du nombre de piles collectées. Ce nombre est stocké dans une variable entière publique.

Dans le script PlayerCollisions, on ajoute une fonction OnTriggerEnter() qui détecte la collision avec les piles (objets avec collider en mode déclencheur). À chaque collision, la variable du script BatteryCollect est incrémentée, modifiant ainsi la texture affichée.

Restriction d’accès à l’avant-poste

Le joueur ne peut ouvrir la porte de l’avant-poste qu’après avoir collecté les quatre piles. Pour cela, on modifie la condition dans la fonction Update() du script PlayerCollisions :

if(hit.collider.gameObject.tag == "outpostDoor" && doorIsOpen == false && BatteryCollect.charge >= 4) {
  Door(doorOpenSound, true, "dooropen", currentDoor);
}

Cette condition vérifie que la porte est fermée et que la variable statique charge du script BatteryCollect est au moins égale à 4 avant d’ouvrir la porte.

Utilisation de la commande GetComponent()

Pour désactiver l’affichage de l’objet Battery GUI une fois la porte ouverte, on utilise la commande :

GameObject.Find("BatteryGUI").GetComponent(GUITexture).enabled = false;

Cette commande permet d’accéder au composant GUITexture d’un objet différent de celui sur lequel est attaché le script en cours.

Indices pour guider le joueur

Si le joueur tente d’ouvrir la porte sans avoir collecté les quatre piles, il est important de lui fournir des indices :

  • Afficher un message textuel indiquant que la porte manque de puissance.
  • Afficher l’objet Battery GUI pour rappeler au joueur qu’il doit collecter les piles.

Pour cela, on ajoute dans la condition else if du script PlayerCollisions :

else if(hit.collider.gameObject.tag == "outpostDoor" && doorIsOpen == false && BatteryCollect.charge < 4) {
  GameObject.Find("BatteryGUI").GetComponent(GUITexture).enabled = true;
  TextHints.message = "le mécanisme de la porte semble manquer de puissance...";
  TextHints.textOn = true;
}

Affichage d’un indice textuel avec GUIText

Pour afficher un message textuel à l’écran, on crée un objet GUI Text :

  • Dans Unity : GameObject > Create Other > GUI Text.
  • Renommer cet objet en TextHint GUI.

Le script TextHints gère l’affichage du texte avec les variables suivantes :

static var textOn : boolean = false;
static var message : String;
private var timer : float = 0.0;

Le fonctionnement est le suivant :

  • textOn agit comme un interrupteur pour afficher ou non le texte.
  • message contient le texte à afficher.
  • timer compte le temps écoulé pour masquer le texte après 5 secondes.

Fonction Start()

function Start() {
  timer = 0.0;
  textOn = false;
  guiText.text = "";
}

Fonction Update()

function Update() {
  if(textOn) {
    guiText.enabled = true;
    guiText.text = message;
    timer += Time.deltaTime;
  }
  if(timer >= 5) {
    textOn = false;
    guiText.enabled = false;
    timer = 0.0;
  }
}

Utilisation des polices dans Unity

Pour personnaliser l’apparence du texte, on importe une police TrueType (.ttf) ou OpenType (.otf) dans le projet via Assets > Import New Asset.

Exemple : la police libre de droits Sugo peut être téléchargée sur www.dafont.com et importée dans Unity.

Après import, on sélectionne la police dans le panneau Project et on ajuste sa taille dans le panneau Inspector (par exemple, Font Size = 24), puis on clique sur Apply.

Pour appliquer la police à l’objet TextHint GUI, on sélectionne cet objet dans le panneau Hierarchy et on choisit la police dans le menu déroulant du paramètre Font du composant GUIText. On peut aussi glisser-déposer la police depuis le panneau Project vers ce paramètre.

Glossaire des termes clés

  • Collider : Composant Unity qui définit la forme physique d’un objet pour détecter les collisions.
  • Trigger (Déclencheur) : Collider configuré pour détecter les interactions sans provoquer de collision physique.
  • Prefab (Élément préfabriqué) : Modèle d’objet réutilisable avec des paramètres prédéfinis.
  • GUI Texture : Composant Unity permettant d’afficher une image 2D dans l’interface utilisateur.
  • GUI Text : Composant Unity permettant d’afficher du texte 2D à l’écran.
  • GetComponent() : Méthode pour accéder à un composant attaché à un objet Unity.
  • OnTriggerEnter() : Fonction appelée lorsqu’un objet entre en contact avec un collider en mode déclencheur.
  • Static variable : Variable partagée entre toutes les instances d’une classe ou accessible globalement.

Points essentiels à retenir

  • Les colliders en mode déclencheur permettent de détecter des interactions sans collision physique.
  • Les éléments préfabriqués facilitent la création et la gestion de multiples objets identiques dans une scène.
  • Le composant GUI Texture sert à afficher des images dynamiques dans l’interface utilisateur.
  • La gestion des collisions et de l’interface graphique peut être contrôlée par des scripts attachés aux objets.
  • La fonction OnTriggerEnter() est essentielle pour détecter la collecte d’objets.
  • La méthode GetComponent() permet d’accéder et de modifier des composants d’objets externes.
  • Il est possible de restreindre l’accès à certaines zones du jeu en fonction des objets collectés.
  • Les indices visuels et textuels améliorent l’expérience utilisateur en guidant le joueur.
  • L’importation et l’utilisation de polices personnalisées permettent d’améliorer l’esthétique des textes affichés.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions