I need help with my 2D movement

I wouldn’t use coroutines for cooldowns. I mean you can, but it has all kinds of weird edge cases if somehow two of them get started.

Just use a cooldown timer.

Cooldown timers, gun bullet intervals, shot spacing, rate of fire:

GunHeat (gunheat) spawning shooting rate of fire:

Coroutines are NOT always an appropriate solution: know when to use them!