Hey can someone please help me with my ammobar

im trying to create an ammobar to keep track of my ammo and i set the value of the bar to my guns ammo but the problem is is that my gun is instantiated after the game starts and if i put the gun prefab as the gun it wont work please help if you know a solution.

public class AmmoBar : MonoBehaviour
{
public Slider ammoBar;
Gun gunAmmo;
public Gun gunn;

private void Start()
{
    gunAmmo = GetComponent<Gun>();
}
    

public void Update()
{
    ammoBar.value = gunn.ammo;

}
}

public class GunController : MonoBehaviour
{
public Transform weaponHold;
public Gun startingGun;
Gun equippedGun;
AmmoBar ammoBar;
void Start()
{
if (startingGun != null)
{
EquipGun(startingGun);
}
ammoBar = GetComponent();
equippedGun = ammoBar.
}

public void EquipGun(Gun gunToEquip)
{
    if (equippedGun != null)
    {
        Destroy(equippedGun.gameObject);
    }
    equippedGun = Instantiate(gunToEquip, weaponHold.position, weaponHold.rotation) as Gun;
    equippedGun.transform.parent = weaponHold;
}


public void Shoot()
{
    if (equippedGun != null)
    {
        equippedGun.Shoot();
        
    }
}

}

public class Gun : MonoBehaviour
{

public int ammo;
public Transform muzzle;
public Projectile projectile;
public float msBetweenShots = 100;
public float muzzleVelocity = 35;
GunController gun;
float nextShotTime;

public void Start()
{
    ammo = 20;
}



public void Shoot()
{

    {
        if (Time.time > nextShotTime)
        {
            if (ammo >= 1)
            {
                ammo--;

                nextShotTime = Time.time + msBetweenShots / 1000;
                Projectile newProjectile = Instantiate(projectile, muzzle.position, muzzle.rotation) as Projectile;
                newProjectile.SetSpeed(muzzleVelocity);

            }
        }
    }
}

}

,public class AmmoBar : MonoBehaviour
{
public Slider ammoBar;
Gun gunAmmo;
public Gun gunn;

private void Start()
{
    gunAmmo = GetComponent<Gun>();
}
    

public void Update()
{
    ammoBar.value = gunn.ammo;

}
}

public class Gun : MonoBehaviour
{

public int ammo;
public Transform muzzle;
public Projectile projectile;
public float msBetweenShots = 100;
public float muzzleVelocity = 35;
GunController gun;
float nextShotTime;

public void Start()
{
    ammo = 20;
}



public void Shoot()
{

    {
        if (Time.time > nextShotTime)
        {
            if (ammo >= 1)
            {
                ammo--;

                nextShotTime = Time.time + msBetweenShots / 1000;
                Projectile newProjectile = Instantiate(projectile, muzzle.position, muzzle.rotation) as Projectile;
                newProjectile.SetSpeed(muzzleVelocity);

            }
        }
    }
}

}

public class GunController : MonoBehaviour
{
public Transform weaponHold;
public Gun startingGun;
Gun equippedGun;

void Start()
{
    if (startingGun != null)
    {
        EquipGun(startingGun);
    }
    
}

public void EquipGun(Gun gunToEquip)
{
    if (equippedGun != null)
    {
        Destroy(equippedGun.gameObject);
    }
    equippedGun = Instantiate(gunToEquip, weaponHold.position, weaponHold.rotation) as Gun;
    equippedGun.transform.parent = weaponHold;
}


public void Shoot()
{
    if (equippedGun != null)
    {
        equippedGun.Shoot();
        
    }
}

}

sorry ignore the two lines in the GunController Script about the ammobar i was experimenting and forgot to delete