Tank Game
The TANK project marked my re-entry into Unity development, focusing on interconnected gameplay systems in a full workflow, inspired by my National Service experience with armoured vehicles.
Mechanics Overview
The mechanics were implemented through focused C# scripts, reinforcing core Unity gameplay patterns. Logic was split into movement, shooting, and health components to maintain clear, reusable responsibilities.
Tank mechanics use physics-safe Rigidbody movement, charge-based shooting with strict state control, and centralized health handling for clean round resets.
TankMovement
TankMovement.cs handles physics-safe Rigidbody movement in the physics loop for consistent behaviour, with dynamically generated input axes to support multiple players. It also switches engine audio between idle and driving states based on movement input.
TankShooting
TankShooting.cs uses an event-driven, charge-based firing system with time-based force accumulation and UI feedback. Projectiles are spawned on release or max charge, with state flags preventing multiple shots per input cycle.
TankHealth
TankHealth.cs centralises health and damage handling, resets state on re-enable for round-based gameplay, and triggers feedback before deactivation to allow clean respawn and flow control.
Managers
To support round-based gameplay, Manager scripts coordinate round-based match flow, handling spawning, player control gating, and state progression, while keeping game flow separate from individual tank logic.
GameManager
GameManager.cs orchestrates TANKS’ round-based loop, handling setup, UI, and camera wiring, then advancing gameplay through explicit round states via a coroutine to ensure clean resets and predictable state transitions.
TankManager
TankManager.cs manages each player tank as a single unit, exposing a clean interface for spawning, resetting, player-specific setup, and control gating. This keeps match flow separate from entity lifecycle, improving scalability and extensibility.
Refelctions
This project helped me move from writing isolated gameplay scripts to thinking in terms of system structure and responsibility boundaries. I learned how to separate low-level mechanics from high-level flow control, and how manager scripts can coordinate state, timing, and player control without tightly coupling systems together. Working with enable/disable lifecycles, coroutines, and physics-safe updates improved my understanding of how Unity expects gameplay code to be structured over time. Overall, TANKS strengthened my ability to reason about real-time game architecture rather than just individual mechanics.