FPS Wave Shooter is a Unity-based first-person zombie survival game focused on fast-paced combat, wave-based enemy spawning, ragdoll physics, weapon switching, enemy drops, and boss encounters.
The player must survive waves of zombies using different weapons while fighting multiple enemy types. Enemies can chase, attack, throw projectiles, drop items, and collapse into ragdolls on death. The game also includes boss AI with a state-based attack system.
- First-person shooter gameplay
- Wave-based zombie survival system
- Multiple enemy AI types:
- Melee zombie AI
- Throwing enemy AI
- Boss AI
- Boss state machine:
- Chase state
- Throw state
- Pause state
- Immediate chase when player leaves range
- Ragdoll death system
- Death particle effects
- Enemy disappears after death delay
- Enemy health system with health bar UI
- Enemy drop system with random drop probability
- Weapon holder system with weapon array support
- NavMeshAgent-based enemy movement
- Animator-based attack and run states
- Low-poly visual style
- Smooth FPS controls
The game includes different enemy types controlled through an enum-based system:
public enum EnemyAIType
{
EnemyAI,
EnemyThrowAI,
BossAI
}This allows the same health/death system to support normal enemies, throwing enemies, and bosses.
The boss uses a simple enum state machine:
public enum BossState
{
Idle,
Chase,
Throw,
Pause
}Boss behavior:
- Chases the player when outside throw range
- Stops and throws projectiles when in range
- Pauses for a short time after attacking
- Immediately returns to chase if the player moves out of range
- Repeats attack cycle while the player stays in range
When an enemy dies:
- AI script is disabled
- NavMeshAgent is stopped and disabled
- Health UI is hidden
- Ragdoll physics are enabled
- Enemy tag changes to
Dead - Death particle effect is spawned
- Enemy drop may spawn based on probability
- Enemy object is destroyed after a short delay
The weapon holder supports an array of weapons, making it easy to add more guns without rewriting weapon switching logic.
public GameObject[] weapons;Weapons can be activated by index, allowing scalable weapon selection.
- Clone the repository.
git clone <your-repository-url>-
Open the project in Unity.
-
Open the main scene.
-
Make sure the player object has the tag:
Player
- Make sure enemies have:
- Enemy health script
- Correct AI script
- NavMeshAgent
- Animator
- RagdollController
- Health canvas
- Death particle prefab
-
Bake the NavMesh for enemy movement.
-
Press Play and survive the zombie waves.
Recommended:
- Unity 2021 LTS or newer
- AI Navigation / NavMesh support enabled
- Rigidbody and Collider components for ragdoll enemies
Typical FPS controls:
- WASD: Move
- Mouse: Look around
- Left Mouse Button: Shoot
- Number Keys / Weapon Input: Switch weapons
- Space: Jump
Controls may vary depending on your player controller setup.
This project demonstrates:
- Unity FPS gameplay programming
- Enemy AI using NavMeshAgent
- State-machine based boss behavior
- Ragdoll physics integration
- Weapon switching with arrays
- UI health bars
- Death particles and delayed object cleanup
- Randomized enemy drops
- Modular enemy scripts
Possible future features:
- More weapon types
- More zombie variants
- Boss health bar UI
- Ammo and reload system
- Upgrade shop between waves
- Sound effects and music
- Main menu and pause menu
- Save/load high score system
- More maps and arenas
Contributions are welcome. Feel free to open issues, suggest improvements, or submit pull requests.
This project is licensed under the MIT License.
Special thanks to the Unity development community and Kenney Assets for helpful resources and game-ready assets.
#fps #unity #zombies #opensource!