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