Ajout de mécanismes furtifs dans Unity

Les mécanismes de furtivité sont des systèmes de jeu qui permettent aux joueurs d'éviter d'être détectés par les ennemis. Couramment utilisés dans les jeux basés sur la furtivité comme *Assassin's Creed* ou *Hitman*, ces mécanismes incluent des fonctionnalités telles que les cônes de vision, la détection sonore, les cachettes et les niveaux de visibilité des joueurs. L'ajout de mécanismes de furtivité peut rendre le jeu plus attrayant en encourageant la réflexion stratégique et en récompensant une planification minutieuse.

Dans ce tutoriel, nous allons créer des mécanismes de furtivité de base dans Unity. Le joueur évitera d'être détecté par les ennemis qui ont des cônes de vision. Si le joueur entre dans le cône, il sera détecté.

Étape 1: Mise en place de la scène

Commencez par créer une scène Unity simple:

  1. Créez un nouveau projet Unity.
  2. Ajoutez un Plane pour servir de sol.
  3. Ajoutez un modèle 3D (par exemple, une capsule) pour représenter le Player.
  4. Ajoutez un autre modèle 3D (par exemple, un cube) pour représenter un Ennemi.
  5. Positionnez le joueur et l’ennemi à différents endroits du plan.

Étape 2: Création du cône de vision de l'ennemi

Nous allons simuler la vision de l'ennemi à l'aide d'une zone de déclenchement en forme de cône:

  1. Faites un clic droit dans la hiérarchie et sélectionnez Créer > Objet 3D > Cylindre.
  2. Redimensionnez le cylindre pour qu'il ressemble à un cône en ajustant son échelle (par exemple, X = 1, Y = 0,5, Z = 1).
  3. Faites-le pivoter de sorte que la base plate soit orientée vers l'avant (par exemple, Rotation X = 90).
  4. Attachez-le en tant qu’enfant de l’Enemy GameObject.
  5. Définissez le Collider du cône comme un Trigger.
  6. Ajustez l'échelle et la position pour correspondre au champ de vision de l'ennemi.

Étape 3: Rédaction du script de détection de l'ennemi

Maintenant, créons un script pour détecter le joueur dans le cône de vision:

  1. Créez un script C# appelé EnemyVision.
  2. Attachez le script à l'Enemy GameObject.
  3. Utilisez le code suivant:
using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = true;
            Debug.Log("Player Detected!");
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Ce script vérifie si le joueur entre ou sort du cône de vision. Assurez-vous que le GameObject du joueur possède la balise Player.

Étape 4: Ajout de la visibilité du joueur

Ensuite, implémentons une mécanique de visibilité pour rendre la détection plus dynamique. Le joueur sera plus difficile à détecter lorsqu'il est accroupi ou caché:

  1. Créez un nouveau script appelé PlayerVisibility.
  2. Attachez-le au GameObject du joueur.
  3. Utilisez le code suivant:
using UnityEngine;

public class PlayerVisibility : MonoBehaviour
{
    public float visibility = 1.0f; // Full visibility

    void Update()
    {
        // Reduce visibility when crouching (e.g., pressing "C")
        if (Input.GetKey(KeyCode.C))
        {
            visibility = 0.5f;
            Debug.Log("Crouching: Reduced visibility!");
        }
        else
        {
            visibility = 1.0f; // Default visibility
        }
    }
}

Ce script ajuste le niveau de visibilité du joueur en fonction de ses actions. Les ennemis peuvent ensuite utiliser cette valeur pour décider de la facilité avec laquelle le joueur est détecté.

Étape 5: Améliorer la détection des ennemis

Maintenant, combinons visibilité et détection. Modifiez le script EnemyVision comme suit:

using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerVisibility playerVisibility = other.GetComponent<PlayerVisibility>();

            if (playerVisibility != null && playerVisibility.visibility > 0.75f)
            {
                playerDetected = true;
                Debug.Log("Player Detected with high visibility!");
            }
            else
            {
                Debug.Log("Player not visible enough to detect.");
            }
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Ce script utilise le niveau de visibilité du joueur pour déterminer s'il est détecté.

Étape 6: tester les mécanismes de furtivité

Pour tester votre configuration:

  1. Appuyez sur le bouton Play dans l'éditeur Unity.
  2. Déplacez le joueur dans le cône de vision de l'ennemi pour déclencher la détection.
  3. Appuyez sur le bouton d'accroupissement (par exemple, "C") pour réduire la visibilité et tester son effet sur la détection.

Améliorations facultatives

Voici quelques idées pour développer vos mécanismes de furtivité:

  • Détection du son: Ajoutez un mécanisme où l'ennemi détecte le joueur en fonction du bruit qu'il fait (par exemple, en courant).
  • Cachettes: Créez des cachettes où le joueur devient indétectable.
  • Patrouiller les ennemis: Programmez les ennemis pour qu'ils patrouillent le long d'un chemin défini à l'aide du système NavMesh d'Unity.
  • États d'alerte: Ajoutez des niveaux d'alerte pour les ennemis (par exemple, suspect, recherche, agressif).

Conclusion

Nous avons implémenté des mécanismes de furtivité de base dans Unity, notamment des cônes de vision et des niveaux de visibilité. Ces systèmes peuvent servir de base à un gameplay furtif plus complexe. Expérimentez avec des fonctionnalités supplémentaires pour créer une expérience de furtivité totalement immersive pour votre jeu.