虽然循环使Unity崩溃,但不是无限的

Kli*_*ker 1 c# infinite-loop while-loop unity-game-engine

我从类似的帖子中知道,无限的while循环因导致Unity3d崩溃而臭名昭著。我想隐含地在我正在处理的东西中进行一会儿循环,我相当确定这不是“无限”,但会导致游戏崩溃。

逻辑的想法是检查整数列表中的连续数字,并以此为基础应用加分。该列表包含“有效射击”,并且每次射击时都会添加一个新的int-有效射击越连续,奖金就越高。

这是我所拥有的:

        int count = 0;
        int firstItem = 0;
        int multiples = 3;
        int currentMultiple = 0;
        int bonusX = 0;

        foreach (int i in effectiveShots)
        {
            if (count == 0)
            {
                firstItem = i;
                count = 1;
            }

            else if (i == firstItem + count)
            {
                count++;
            }

        }

        while (count >= multiples)
        {
            currentMultiple = multiples;

            if (count == currentMultiple + multiples)
            {
                bonusX += 1;
            }

            if (bonusX > 10 || gameOver)
                break;

            UnityEngine.Debug.Log(bonusX);
        }
Run Code Online (Sandbox Code Playgroud)

要检查在个连续程序条目的逻辑effectiveShots名单是从@乔恩飞碟双向的答案采取这里。尽管这似乎可行,但我认为这可能是问题所在。一旦错过任何一击,就count需要重新设置。什么想法或建议吗?

一旦连续有效击球数达到第一个倍数即3击,则应进入while循环。然后,此后对于每组后续有效射击,增加奖励,例如:

3 shots: bonusX = 1
6 shots: bonusX = 2
9 shots: bonusX = 3
12 shots: bonusX = 4

and repeat this until `count` is no longer >= 3, i.e. the player missed a shot. 
Run Code Online (Sandbox Code Playgroud)

问题是,一旦我击中3次连发命中并进入此循环,游戏就会崩溃。我不认为我会称其为无限循环,因为错过击球机会(设置count == 0)会意味着while条件不再成立,因此退出循环(我认为?)。我还添加了额外的检查以在某些情况下脱离循环,但这没有什么区别。

如果您能够指导如何解决此崩溃问题,或者总体上对更好的方法提出建议,不胜感激!

Mar*_*Pim 5

在你没有while循环会改变任一值countmultiples等条件将始终计算为相同的值=>无限循环