我正在通过一个课程来学习Unity。
现在,当我按下播放按钮时,我被困在统一屏幕冻结的位置。
它发生在生成器管理器中,用于随机定位的敌人和能量提升
敌人的IEnumerator
可以正常工作,但是一旦我将其添加到通电中并按下播放按钮,它就会冻结。
当我在“生成器管理器”中注释掉powerup部分并重新启动unity时,它工作正常。
我应该如何做才能使通电产卵正常工作?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnManager : MonoBehaviour
{
[SerializeField]
private GameObject _enemyShipPrefab;
[SerializeField]
private GameObject[] powerup;
// Start is called before the first frame update
void Start()
{
StartCoroutine(EnemySpawnRoutine());
StartCoroutine(PowerupSpawnRoutine());
}
public IEnumerator EnemySpawnRoutine()
{
while(true)
{
float enemyPositionX = Random.Range(-8.34f, 8.34f);
Instantiate(_enemyShipPrefab, new Vector3(enemyPositionX, 6.39f, 0), Quaternion.identity);
yield return new WaitForSeconds(5.0f);
}
}
public IEnumerator PowerupSpawnRoutine()
{
while(true)
{
// float powerupPositionX = Random.Range(-8.622f, 8.622f);
int randomPowerup = Random.Range(0, 3);
Instantiate(powerup[randomPowerup], new Vector3(Random.Range(-8.622f, 8.622f), 4.5f, 0), Quaternion.identity);
}
}
}
答案 0 :(得分:2)
在您的listFreqs
中,env:
- name: CONFIG_HASH
valueFrom:
fieldRef:
fieldPath: metadata.annotations['configHash']
总是会无限循环地运行。您不会在其中的任何地方PowerupSpawnRoutine
。
您还应该在while(true)
中添加延迟。
yield
答案 1 :(得分:0)
如Muhammad Farhan Aqeel所述,您yield
不在while(true)
的{{1}}循环内的任何地方。
但是,作为一种完全替代方法,您根本可以不使用协程,也可以在用例中使用InvokeRepeating
:
PowerupSpawnRoutine