Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的统一游戏中的危险不会产生_C#_Unity3d - Fatal编程技术网

C# 我的统一游戏中的危险不会产生

C# 我的统一游戏中的危险不会产生,c#,unity3d,C#,Unity3d,我有一个游戏,你是一个玩家立方体,当其他立方体通过你的道路时,你必须躲避它们。由于我称之为GameController的脚本,敌人的立方体应该会产生。但是立方体没有产卵。请帮忙。(无论何时我的多维数据集被破坏,gameover和重启功能都不起作用) 我试图重新创建预置和代码,但什么也没发生。同样的代码也在我的其他游戏中使用 这是我的密码: void Start() { gameOver = false; restart = false; restartText.text

我有一个游戏,你是一个玩家立方体,当其他立方体通过你的道路时,你必须躲避它们。由于我称之为GameController的脚本,敌人的立方体应该会产生。但是立方体没有产卵。请帮忙。(无论何时我的多维数据集被破坏,gameover和重启功能都不起作用)

我试图重新创建预置和代码,但什么也没发生。同样的代码也在我的其他游戏中使用 这是我的密码:

void Start()
{
    gameOver = false;
    restart = false;
    restartText.text = "";
    gameOverText.text = "";
    score = 0;
    UpdateScore();
    StartCoroutine(SpawnWaves());
}

void Update()
{
    if (restart)
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

        }
    }
}

IEnumerator SpawnWaves()
{
    yield return new WaitForSeconds(startWait);
    while (true)
    {
        for (int i = 0; i < hazardCount; i++)
        {
            GameObject hazard = hazards[Random.Range(0, hazards.Length)];
            Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
            Quaternion spawnRotation = Quaternion.identity;
            GameObject newSpawn = Instantiate(hazard, spawnPosition, spawnRotation) as GameObject;
            yield return new WaitForSeconds(spawnWait);
        }
        yield return new WaitForSeconds(waveWait);

        if (gameOver)
        {
            restartText.text = "Press 'R' for Restart";
            restart = true;
            break;
        }
    }
}

public void AddScore(int newScoreValue)
{
    score += newScoreValue;
    UpdateScore();
}

void UpdateScore()
{
    scoreText.text = "Score: " + score;
}

public void GameOver()
{
    gameOverText.text = "Game Over!";
    gameOver = true;
}
void Start()
{
gameOver=false;
重新启动=错误;
restartText.text=“”;
gameOverText.text=“”;
得分=0;
UpdateScore();
start例程(SpawnWaves());
}
无效更新()
{
如果(重新启动)
{
if(Input.GetKeyDown(KeyCode.R))
{
加载场景(SceneManager.GetActiveScene().buildIndex);
}
}
}
IEnumerator spawnews()
{
返回新的WaitForSeconds(startWait);
while(true)
{
对于(int i=0;i
}


我希望敌人会繁殖,但他们不是

我已将您的示例代码复制并粘贴到示例项目中。在本例中,您的脚本按预期工作,正如您已经提到的,它在其他项目中工作

所以在我看来,这与检查员的价值观有关。 检查以下各项: 你检查过你的危险计数大于零吗? 你的hazardArray是否完全充满了预制件? (如果不是,则应导致不生成,但也应导致空引用异常。)

另一种选择是,您可以制作一个屏幕截图或以某种方式在inspector中提供您的值,这样就可以重现错误

Offtopic:gameOver延迟后重新启动,因为if(gameOver)-子句位于WaitForSeconds(waveWait)之后。我的建议是将其改为:

public GameObject[] hazards;
public Vector3 spawnValues;
public int hazardCount;
public float spawnWait;
public float startWait;
public float waveWait;
public Text scoreText;
public Text restartText;
public Text gameOverText;
private bool gameOver;
private bool restart;
private int score;

private Coroutine gameRoutine;


void Start()
{
    gameOver = false;
    restart = false;
    restartText.text = "";
    gameOverText.text = "";
    score = 0;
    UpdateScore();
    gameRoutine = StartCoroutine(SpawnWaves());
}

void Update()
{
    if (restart)
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

        }
    }
}

IEnumerator SpawnWaves()
{
    yield return new WaitForSeconds(startWait);
    while (true)
    {
        for (int i = 0; i < hazardCount; i++)
        {
            GameObject hazard = hazards[Random.Range(0, hazards.Length)];
            Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
            Quaternion spawnRotation = Quaternion.identity;
            GameObject newSpawn = Instantiate(hazard, spawnPosition, spawnRotation) as GameObject;
            yield return new WaitForSeconds(spawnWait);
        }
        yield return new WaitForSeconds(waveWait);    
    }
}

public void AddScore(int newScoreValue)
{
    score += newScoreValue;
    UpdateScore();
}

void UpdateScore()
{
    scoreText.text = "Score: " + score;
}

public void GameOver()
{
    gameOverText.text = "Game Over!";
    restartText.text = "Press 'R' for Restart";
    restart = true;
    gameOver = true;
    StopCoroutine(gameRoutine);
}
公共游戏对象[]危险;
公共向量值;
公众伤害计数;
公众等待;
公共浮动startWait;
公众等待;
公共文本;
公共文本重新启动文本;
公共文本游戏超文本;
私人布尔加莫弗;
私有bool重启;
个人智力得分;
私有协同程序;
void Start()
{
gameOver=false;
重新启动=错误;
restartText.text=“”;
gameOverText.text=“”;
得分=0;
UpdateScore();
gameRoutine=startcroutine(SpawnWaves());
}
无效更新()
{
如果(重新启动)
{
if(Input.GetKeyDown(KeyCode.R))
{
加载场景(SceneManager.GetActiveScene().buildIndex);
}
}
}
IEnumerator spawnews()
{
返回新的WaitForSeconds(startWait);
while(true)
{
对于(int i=0;i

我在这里改变的是,if条件被删除,协同程序现在存储在Start()处,并在gameOver()方法执行时直接停止。另一个替代StopCorroutine()的选项是将while循环的条件设置为while(!gameOver)。

hazardCount的值是多少,从何处调用
gameOver
以及startWait的值是多少,waveWait和spawnWait?当您添加调试消息时,您的代码会到达哪里?我认为应该是
产生中断
而不是
中断
@Dave,这不会有任何区别。休息是为了退出无休止的while循环。循环退出后,协同程序将立即结束。非常感谢您的回答,发生的事情是我刚刚删除了分数文本,因为它对我没有用处,gamecontroller再次开始工作。再次感谢您的回答。但现在我的问题是gameover和重启功能不起作用\任何异常或警告或什么都没有发生?好的。因为事实上,我的第一个可能的猜测是没有抛出异常,场景没有正确地添加到构建中,这已经不可能了。我建议您检查其他脚本,并在Gameover()方法中添加Debug.Log()。但我认为由于另一个脚本中的问题,该方法根本无法执行。如果你能在一个新的问题中或在第二个问题中提供更多关于你的其他脚本或检查器值的信息,那就不错了