按下播放按钮后Unity冻结

时间:2020-06-16 07:32:57

标签: c# visual-studio unity3d

我正在通过一个课程来学习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);
        }
    }
}

2 个答案:

答案 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