Final Project: Wave-Based Shooter
Combine physics, UI, input, ScriptableObjects, pooling, and save data into one small playable slice.
Requirements
- Use raycasting (or physics collisions) to detect when the player's shots hit an enemy.
- Represent enemy stats (health, speed, prefab) with a
ScriptableObject, so tuning them doesn't require touching code. - Pool your bullets and/or enemies instead of calling
Instantiate/Destroyon every shot or spawn. - Show the player's health and current score on a
Canvas-based UI, updated live as the game state changes. - Read player input (fire, move) using either the legacy
Inputclass or the Input System package. - Save the player's best score with
PlayerPrefs, and display "New high score!" when it's beaten.
Stretch goals
- Use a trigger collider for a pickup (e.g. a health or ammo crate) instead of a raycast hit.
- Save more detailed run data (wave reached, enemies defeated) as JSON instead of just the high score.
- Add a pause menu Canvas that disables gameplay input while open.
Submit your repository link below when you are done, an instructor will review it before you can mark this lesson complete. Good luck! 🚀