
UNDEAD SHOOTER
VR SURVIVAL GAME
VIDEO GAMEPLAY
"You alone harness the power to stop the undead"
PROJECT OVERVIEW
Undead Shooter immerses players in a post-apocalyptic world overrun by hordes of zombies. Armed with a revolver, players must journey through levels of undead zombies, ensuring they are not hit 3 times or it is lights out for them…


FEATURES
Smooth Locomotion & Snap Turning: Enjoy smooth movement through the game's environments and snap turning provides quick rotation for enhanced navigation and combat.
First Person Exploration: Immerse yourself in the post-apocalyptic world of Undead Shooter in the First Person Perspective.
Multi-Level Completion: Venture through different environments and levels, and raise hell for the zombies that stand in your way.
Dynamic UI Elements: Dynamic UI Elements guide you in your journey, depicting the number of zombies remaining, and how much health you have left.
AI - NavAgent Enemies: Although they may seem dumb, the undead are smart and know where you are, and will do all they can to reach you.
And of course - Zombie Killing: Armed with a revolver, your mission is to survive. Press the trigger to shoot and kill the undead and move forward
DESIGN PROCESS - WEEK 1
Shooting Projectiles

Capsule Enemy Death

DESIGN PROCESS - WEEK 2
AI Enemy Navigation

Enemy Spawning and UI Elements

DESIGN PROCESS - WEEK 3 FINAL
Level 1 Scene

Level 2 Scene

Win Scene

THE TECHNICALITIES - HOW THINGS WORK? (See code snippets and Unity Inspector Images in Presentation)
The Revolver and The Bullet Projectile:
The revolver makes use of the “Blaster Script,” which includes the projectile prefab, shooting point, and XRGrabInteractable. Shooting is managed by BeginShootWithDelay and ShootWithDelay Coroutine, controlling firing rate and reloads. The “Projectile script” controls bullet behavior, moving it forward and handling collisions with enemies. Upon the bullet/projectile hitting an “enemy”, a Blood particle effect is shown, and the bullet is destroyed after a delay. The “Bullet script” simplifies collision detection, focusing on destroying the bullet when it hits enemies.
The Zombie Walk and Die Animation:
The animator controls the movement of the “Enemy,” or zombie, as well as the death sequences. The "Speed" parameter in the Animator manages their walking animation, while the "Die" trigger initiates their death animation upon collision with player projectiles. The HumanoidEnemyDeath script handles the destruction process, disabling the zombie's Collider and NavMeshAgent before destroying the GameObject.
Zombie Spawning, Count, and Player Health:
Zombie spawning is triggered by the player shooting a button gameobject with the bullet projectile. This causes a specified number of zombies to spawn around the scene. The GameManager script tracks the zombie count (Specified from the Button Activation Script), updating UI elements displaying the remaining zombies and player health. As zombies are destroyed (by collision with player projectiles) or the player's health decreases (upon collision with zombies), the GameManager loads win or lose scenes. The HumanHealthTracker script handles player health, reducing health upon collision with zombies and notifying the GameManager of health updates. UI Changes are reflected in the corresponding Text Mesh Pro Elements assigned in the inspector.
AI Enemies - NavMesh:
AI navigation of the zombies relies on them being given the component of NavMesh agents, which allows them to follow and move along a surface that has the NavMesh component. Using the “Navigation Script,” the zombies are set to detect the location of the gameobject (XR Origin Capsule) with the “player” tag, and move towards that object. NavMesh obstacles exist on objects within each of the levels/scenes, and provide “non-walkable” surfaces for the zombies to avoid.