Shooting Range

Prototype VR - Janvier 2026 | Océane LEITE - MMI Troyes

Description du projet

Shooting Range est une expérience VR qui explore le thème de l'obéissance aveugle à travers un jeu de tir apparemment innocent. Le joueur progresse à travers 4 scènes dont l'ambiance s'assombrit progressivement.

Vidéo de démonstration

Fonctionnalités implémentées

Gameplay VR

  • ✓ Système de tir avec pistolet VR
  • ✓ Rechargement physique
  • ✓ Détection précise par Raycast
  • ✓ Effets laser et sons immersifs

Système de jeu

  • ✓ Score dynamique (+10 / -10)
  • ✓ Timer par scène
  • ✓ Progression narrative (4 scènes)
  • ✓ Munitions limitées (10)

Progression visuelle

  • ✓ Scene1 : Lumière claire, normale
  • ✓ Scene2 : Ambiance orangée
  • ✓ Scene3 : Chaos, rouge intense
  • ✓ Scene4 : Nuit rouge, très sombre

Audio immersif

  • ✓ 7 effets sonores différents
  • ✓ Sons de tir, rechargement
  • ✓ Feedback audio selon cibles
  • ✓ Ambiance sonore par scène

Les 4 scènes

Scene 1 : Entraînement Standard

Lumière claire, cibles vertes et rouges. Règle simple : tirer sur les cibles vertes (+10 points).

Scene 2 : Nouvelle Règle

Ambiance orangée. Les règles changent : maintenant il faut tirer sur les rouges. Adaptation nécessaire.

Scene 3 : Chaos Total

Lumière rouge intense. Les cibles changent de couleur aléatoirement. Confusion et tension.

Scene 4 : Mission Finale

Nuit rouge, très sombre. Cibles noires difficiles à voir. Présence de lapins innocents. Questionnement moral.

Exemple de code

Système de rechargement physique avec XR Interaction Toolkit (vu en cours)

using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class ChargeurPhysique : MonoBehaviour
{
    public GunController pistolet;
    public XRSocketInteractor socketPistolet;
    public bool ejecterQuandVide = true;
    public float delaiEjectionVide = 0.3f;
    
    private GameObject chargeurActuel;
    private bool verificationActive = false;

    void Start()
    {
        socketPistolet.selectEntered.AddListener(OnChargeurInsere);
        socketPistolet.selectExited.AddListener(OnChargeurRetire);
    }

    void Update()
    {
        if (verificationActive && ejecterQuandVide && pistolet.EstVide())
        {
            verificationActive = false;
            Invoke("EjecterChargeurVide", delaiEjectionVide);
        }
    }

    void OnChargeurInsere(SelectEnterEventArgs args)
    {
        chargeurActuel = args.interactableObject.transform.gameObject;
        pistolet.Recharger();
        verificationActive = true;
    }

    void EjecterChargeurVide()
    {
        if (socketPistolet.hasSelection)
        {
            var chargeur = socketPistolet.firstInteractableSelected;
            socketPistolet.interactionManager.SelectExit(socketPistolet, chargeur);
            Destroy(chargeur.transform.gameObject);
        }
        chargeurActuel = null;
    }
}

Assets utilisés

Modèles 3D

  • Poly Pizza - Modèles low-poly
  • • Cibles de tir
  • • Décors de fête foraine
  • • Lapins et carottes

Effets visuels

  • JMO Assets - Cartoon FX Remaster Free
  • Lana Studio - Systèmes de particules
  • • Effets de tir et impacts
  • • Particules de cœurs

Textures

  • ADG_Textures - Pack de textures
  • • Sols et terrains
  • • Matériaux divers

Interface

  • 2D Casual UI - Éléments d'interface
  • • Boutons et panneaux
  • • TextMeshPro pour le texte

Télécharger le prototype

Prototype VR pour Meta Quest 2

Télécharger APK (Quest 2) jouer via Wbgl (PC)

Réalisé par Océane LEITE

MMI Troyes - Janvier 2026

WR507D : Dispositifs interactifs