I have a script that gets an array of targetables from another script, and shoots at them whenever they are in range. However, it shoots as fast as Update can go, instead of a timed firing rate in the coroutine. what fixes can I do to make it fire at intended firing rate?
[RequireComponent(typeof(TarGetter))]
public class ProjectileSpawn : MonoBehaviour
{
[SerializeField] TarGetter targetter;
[SerializeField] float firingRate = 1f;
[SerializeField] int maxRate = 5;
[SerializeField] GameObject projectile;
[SerializeField] Transform spawnPoint;
private const string FIRING_POINT = "Firing Point";
Coroutine shootTargets;
public float FiringRate
{ get { return firingRate; }
set
{ firingRate = value;
if(value > maxRate)
{
firingRate = maxRate;
}
}
}
private void Start()
{
targetter = GetComponent<TarGetter>();
spawnPoint = GetComponentInChildren<Transform>().Find(FIRING_POINT);
}
private void Update()
{
TargetsAcquired();
}
private void TargetsAcquired()
{
foreach (Shape t in targetter.target)
{
if (t != null)
{
shootTargets = StartCoroutine(FireProjectiles(FiringRate, t));
}
else if(!t)
{
if (shootTargets != null)
{
StopCoroutine(shootTargets);
}
else
{
return;
}
}
}
}
IEnumerator FireProjectiles(float rate, Shape target)
{
while (true)
{
GameObject fire = Instantiate(projectile, spawnPoint.transform.position, transform.rotation) as GameObject;
fire.GetComponent<Projectile>().GetTarget(target);
yield return new WaitForSeconds(rate);
}
}
}