Прикоснитесь, совершенно неясно, как пользователь сможет запустить спавн снова, я бы рекомендовал использовать Coroutine в целом. Они похожи на маленькие временные Update
блоки, но их легче контролировать и обслуживать. Это также более эффективно, так как он не вызывает метод Update
каждый кадр, даже когда количество maxObjects уже достигнуто и ничего не произойдет в любом случае
[SerializeField]
private GameObject _asteroidPrefab;
[SerializeField]
private float _spawnInterval = 0.125f;
[SerializeField]
private int _maxObjects;
private bool _canStart = true;
// However your player calls this method
public void StartSpawn()
{
// Only start spawning if there is no other spawn routine already running
if(_canStart) StartCoroutine(Spawn());
}
private IEnumerator Spawn()
{
// Just in case ignore if another routine is already running
if(!_canStart) yield break;
// block concurrent routines
_canStart = false;
var interval = new WaitForSeconds(_spawnInterval);
for(var i = 0; i < _maxObjects; i++)
{
Instantiate(_asteroidObject, transform.position, Quaternion.identity);
// yield makes Unity pause this routine and render the frame
// and continue from here in the next frame
// Then since we yield return another IEnumerator in thi case WaitForSconds
// it results exactly in this: Holds here for given seconds and then goes to the next iteration
yield return interval;
}
// re-enable the StartSpawn
_canStart = true;
}
Тогда, если вы также захотите автоматически начать порождать в начале вы можете просто позвонить в
private void Start()
{
StartSpawn();
}