JUL 2, 1993

Space Shooter

A 3D first-person shooter where I built the entire combat layer - ScriptableObject-driven weapons with ammo and recoil, two enemy types, a Pickup inheritance tree, and a clear-the-room win state - on top of Unity's first-person controller.

Playable Open the WebGL tab to play it in your browser.

Space Shooter
EngineUnity
LanguageC#
BuildPlayable
WeaponsScriptableObjects
CombatHitscan Raycast
CameraCinemachine
Systems Built
  1. 01
    Weapons Data-Driven Weapons

    Drove every weapon from a WeaponSO ScriptableObject - fire rate, damage, magazine size, and automatic vs semi - so a new gun is a data asset and a prefab, not new code. WeaponSO.cs

  2. 02
    Combat Hitscan Shooting

    Built hitscan fire as a camera-forward raycast gated by the weapon's fire rate and ammo, spawning a hit VFX and damaging any EnemyHealth it strikes, with a muzzle flash, a shoot animation, and a Cinemachine impulse for recoil shake. Weapon.cs

  3. 03
    Weapons Weapon Switching

    Programmed an active-weapon controller that swaps guns by instantiating the SO's prefab and injecting the ammo HUD, and reads input to fire in semi or automatic mode per the weapon's config. ActiveWeapon.cs

  4. 04
    Enemies Chaser & Turret

    Built two enemy types - a NavMeshAgent robot that paths to the player every frame and self-destructs on contact, and a stationary turret that tracks the player with LookAt and fires Rigidbody projectiles on a cooldown. Robot.cs · Turret.cs

  5. 05
    Pickups Pickup Inheritance

    Wrote an abstract Pickup base that floats, spins, and fires a virtual OnPickup on player contact - ammo and weapon pickups override it to refill the magazine or switch to a new gun. Pickup.cs · AmmoPickup.cs · WeaponPickup.cs

  6. 06
    Game Flow Health & Win State

    Built shield-bar player health that cuts to a death Cinemachine camera on defeat, enemy health that reports each kill to a GameManager, and a win the moment the room is cleared - with timed spawn gates feeding the fight. PlayerHealth.cs · GameManager.cs