Minor syntax changes (please note that C# method names should start in uppercase e.g. TriggerDefeat() instead of triggerDefeat())
Cooldown logic is placed in its own method instead of in Update() for EnemyShooting.cs.
Removed SetHealth() in Health.cs and EnemyHealth.cs. Not needed since we can freely edit health in the inspector anyway.
Removed getting of stage number in EnemyHealth.cs which does not make much sense. Instead, stage number is now gotten using SceneManager in GameLogic.cs.
Removed the stopwatch fields and methods in GameLogic.cs. We can simply use Time.time to supply the time elapsed.
Removed the arguments from a number of methods (e.g. Shoot(bulletForce), TriggerVictory(stageNumber)) as the required arguments are already fields in the scripts so it's kind of redundant.
Removed the reference to PlayerMovement.cs in EnemyMovement.cs as we can get playerTankPos in EnemyMovement.cs itself and accordingly removed the playerTankPos field in PlayerMovement.cs.
Changed playerTankPos and enemyTankPos to simply reference hull.transform.position. There is no need to instantiate a new Vector2 as a Vector3 can be automatically converted to a Vector2.
New method: GameObject.Transform.GetChild(index) or GameObject.Transform.Find(name) to get the child objects of a GameObject.
This also allows us to automatically assign the enemy hulls and towers instead of manually drag and dropping.
Also allows us to assign ProjectileSource.
Added new layers PlayerProjectiles, EnemyProjectiles, PlayerTrigger and EnemyTrigger as well as new child objects to the prefabs to serve as targets. This allows projectile hits to be registered via OnTriggerEnter2D() without any physics happening. Ask me if you need more clarification.
Sound no longer gets cut off when the projectile is destroyed. The AudioSource is now attached to the tank itself instead. However, it gets cut off when multiple projectiles are fired rapidly.
In the process of rewriting GameLogic.cs. It does not make sense for Health.cs to access GameLogic.cs to trigger victory/defeat. Rather, GameLogic should decide that by itself.