Pièges et Mécanismes

Cette page t’accompagne dans la mise en place de différents systèmes qui peuvent servir d’Ennemi ou de tout autre obstacle, dans un Donjon ou pas, tu es très libre d’adaptation ! 

  • Le premier script permet de faire bouger un objet d’un point A à un point B en suivant une liste de destinations. (On peut ajuster la vitesse et décider si l’objet doit repartir à la première destination une fois la dernière atteinte.)
  • Le deuxième script permet de faire tourner un objet sur lui-même à une vitesse constante. 
  • Le troisième script permet de faire tourner un objet autour d’un point pivot à une vitesse constante. 
  • Le quatrième script permet de faire clignoter un objet en alternant son apparence (visible/invisible) à intervalles réguliers, comme pour créer un piège qui s’active et se désactive.

A propos de ce guide

Ce guide a été créé avec la dernière version stable de Unity au moment de la rédaction (2021.3.19f)

Un objet qui  patrouille

Ce script permet de faire patrouiller un objet (en suivant une liste de destinations) et peut être utilisé par exemple pour faire bouger un ennemi de manière prévisible.

using UnityEngine;

public class TrapPatrouille : MonoBehaviour

{

    // Variables publiques

    public float vitesse = 1f; // vitesse de déplacement

    public List<GameObject> destinations; // les destinations à suivre

    public bool boucle = true; // si true, le chemin est bouclé, sinon l’objet s’arrête une fois arrivé au bout du chemin

    // Variables privées

    private int indiceDestination = 0; // indice de la destination courante dans la liste

    private float tolerance = 0.1f; // la distance acceptable pour considérer que l’objet a atteint une destination

    void Update()

    {

        // déplacer l’objet vers la destination suivante

        transform.position = Vector2.MoveTowards(transform.position, destinations[indiceDestination].transform.position, vitesse * Time.deltaTime);

        // si l’objet atteint la destination

        if (Vector2.Distance(transform.position, destinations[indiceDestination].transform.position) < tolerance)

        {

            indiceDestination++; // passer à la destination suivante

            if (indiceDestination >= destinations.Count) // si la dernière destination est atteinte

            {

                if (boucle)

                {

                    indiceDestination = 0; // boucler sur la première destination

                }

                else

                {

                    enabled = false; // désactiver le script

                    return;

                }

            }

        }

    }

}

Explication du Script : 

Ce code fait bouger un objet. Il se déplace de manière automatique d’un point A à un point B en suivant un chemin qui est défini par une liste de destinations.

Le code définit plusieurs paramètres pour contrôler le mouvement de l’objet, tels que la vitesse de déplacement, si l’objet doit boucler ou s’arrêter une fois qu’il atteint la dernière destination, et la tolérance de distance pour considérer que l’objet a atteint une destination.

À chaque fois que l’objet atteint une destination, le code passe à la destination suivante jusqu’à ce que toutes les destinations soient atteintes. Si l’objet doit boucler, l’objet revient à la première destination une fois qu’il a atteint la dernière et s’arrête. 

Note : Il est possible de déclencher le début du mouvement de l’objet à un moment précis (quand on touche un objet par exemple) pour créer une petite animation et un Objet qui s’enfuit à l’approche du Joueur. Si on désactive la boucle, l’objet s’arrêtera une fois qu’il aura atteint la dernière destination.

Pour que le script fonctionne, il faut dans Unity :

  1. Placer des CREATE EMPTY  (clic droit dans la hiearchy) représentant les points de patrouille dans la scène. (tu peux leur assigner une pastille de couleur, visible uniquement pour le développeur du Jeu).
  1. Créer un nouveau GameObject.
  2. Ajoute le Script « TrapPatrouille » au GameObject.
  3. Dans la fenêtre Inspector du GameObject avec le script, configure les variables publiques du script, comme la vitesse de déplacement et si le chemin doit être bouclé ou non.

5. Et glisser depuis la fenêtre Hierarchy vers la liste de destinations dans la fenêtre Inspector les CREATE EMPTY.

6. Créer un nouveau CREATE EMPTY (pour en faire un dossier), donne lui un nom Significatif, glisse le GameObject et les CREATE EMPTY de destination, et glisse ce dossier dans les Prefab, pour pouvoir réutiliser facilement ! 😀

Une rotation

Ce script permet de faire tourner un objet en continu autour de lui-même, comme une toupie.

using UnityEngine;

public class Rotation : MonoBehaviour

{

    public float rotationSpeed = 10f;

    private void Update()

    {

        transform.Rotate(0f, 0f, rotationSpeed * Time.deltaTime);

    }

}

Explication du Script : 

La variable « rotationSpeed » définit la vitesse de rotation de l’objet en degrés par seconde.

Dans la méthode « Update », la fonction « Rotate » est appelée sur l’objet lui-même (ici, « transform ») pour effectuer la rotation selon l’axe Z (0f, 0f, z), avec une vitesse de rotation en fonction du temps écoulé depuis la dernière frame (Time.deltaTime).

Ainsi, à chaque frame, l’objet tourne d’un certain angle en fonction de la vitesse de rotation définie dans « rotationSpeed ».

Pour que ce script fonctionne, il faut l’attacher à l’objet que l’on souhaite faire tourner en continu, en le faisant glisser-déposer dans la scène Unity ou en sélectionnant l’objet puis en cliquant sur « Add Component » et en choisissant « Rotation » dans la liste des scripts disponibles.

Pour que le script fonctionne, il faut dans Unity :

  1. Créer un nouvel objet (ou en sélectionner un existant).
  2. Attacher le script « Rotation » à l’objet.
  3. Régler la vitesse de rotation dans les paramètres du script.
  4. Donne-lui un nom Significatif et glisse le dossier dans les Prefab, pour le réutiliser ! 😀

Une Orbite / Tourne autour d’un Point

Ce script permet de faire tourner un objet autour d’un point pivot à une vitesse définie.

using UnityEngine;

public class TourneAuTour : MonoBehaviour

{

    public Transform pivot; // Le point pivot autour duquel on veut orbiter

    public float orbitSpeed = 10f; // La vitesse de l’orbite

    private void Update()

    {

        // Fait tourner le GameObject autour du point pivot en utilisant l’axe vertical (Y) comme axe de rotation

        // Le deuxième argument, Vector3.up, correspond à l’axe de rotation

        // Le troisième argument, orbitSpeed * Time.deltaTime, correspond à la vitesse de rotation

        transform.RotateAround(pivot.position, Vector3.forward, orbitSpeed * Time.deltaTime);

    }

}

Explication du Script : 

Ce script permet de faire tourner un objet autour d’un point pivot en utilisant l’axe vertical (Y) comme axe de rotation. 

Le point pivot est défini par la variable « pivot », et la vitesse de rotation est définie par la variable « orbitSpeed ». Le mouvement de rotation est effectué dans la méthode « Update ».

Pour que ce script fonctionne, il faut l’attacher à l’objet que l’on souhaite faire tourner en continu, en le faisant glisser-déposer dans la scène Unity ou en sélectionnant l’objet puis en cliquant sur « Add Component » et en choisissant « Rotation » dans la liste des scripts disponibles.

Pour que le script fonctionne, il faut dans Unity :

  1. Placer un CREATE EMPTY  (clic droit dans la hiearchy) représentant le point de pivot. (tu peux leur assigner une pastille de couleur, visible uniquement pour le développeur du Jeu).
  2. Créer un nouvel objet (ou en sélectionner un existant).
  3. Attacher le script « TourneAutour » à l’objet.
  4. Définir le point pivot en faisant glisser le CREATE EMPTY dans la variable « pivot » du script ou en indiquant directement les coordonnées dans le script
  5. Régler la vitesse de rotation en modifiant la variable « orbitSpeed »
  6. Créer un nouveau CREATE EMPTY (pour en faire un dossier), donne lui un nom Significatif, glisse l’Objet et le CREATE EMPTY de point de Pivot, et glisse ce dossier dans les Prefab, pour pouvoir réutiliser facilement ! 😀

Le clignoteur

Le script permet de faire clignoter des objets à intervalles réguliers.

Ce script désactive tous les objets enfants de l’Objet parent qui porte le Script. Dans la méthode Start() pour s’assurer qu’ils sont tous désactivés au lancement du jeu.

La méthode Update() active et désactive ensuite tous les objets enfants en alternance selon la valeur de isActive.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Clignoteur : MonoBehaviour

{

public int dureeClignotement = 1;

private float timer = 0f;

    private bool isActive = false;

   

    private void Start()

    {

        // Désactiver tous les objets enfants du gameObject porteur du script

        foreach (Transform child in transform)

        {

            child.gameObject.SetActive(false);

        }

    }

   

    void Update()

    {

        timer += Time.deltaTime;

        if (timer >= dureeClignotement)

        {

            isActive = !isActive;

            foreach (Transform child in transform)

            {

                child.gameObject.SetActive(isActive);

            }

            timer = 0f;

        }

    }

}

Pour que le script fonctionne, il faut dans Unity :

  1. Placer un CREATE EMPTY  (clic droit dans la hiearchy).
  2. Glissez en lui les objets à faire clignoter, en tant qu’enfant.
  3. Ajoutez le script Clignotement à l’objet parent.
  4. Modifier les propriétés du script si nécessaire, par exemple la durée du clignotement.
  5. Donne-lui un nom Significatif à l’Objet parent et glisse le dossier dans les Prefab, pour le réutiliser ! 😀
Retour en haut