Unity3d有时游戏结束条件不触发

Unity3d sometimes game ending condition don't trigger

我有一个简单的动作街机游戏,有玩家和多个敌人。我写了一个游戏,当所有敌人都死了,关卡就结束了。我通过一个中央 GameplayController 来跟踪敌人,它有一个名为 enemycount 的静态 int。我在附加到我的每个敌人对象的脚本的唤醒方法中增加这个值,当敌人死亡时,我调用一个方法给这个名为 CountEnemies 的游戏控制器,该方法递减变量,如果它等于零则结束关卡。

这是敌人调用我的 CountEnemies 方法的代码 class:

    GameplayController.instance.CountEnemies();

其中实例只是 returns GameplayController 的单例实例。

这是我的 CountEnemies 方法的代码:

    Debug.Log("Inside Count Enemies");
    Debug.Log("Count Enemies before: " + enemiesCount);
    enemiesCount--;
    Debug.Log("Count Enemies after: " + enemiesCount);

    if (enemiesCount == 0) 
    {
        Debug.Log("Enemy Count is equal to zero");
        //Complete Level
    }
    Debug.Log("End Count Enemies");

现在的问题是它过去大部分时间都可以工作。但是随机地在某个时候,当我尝试在移动设备上 运行 它时,它无法结束关卡。我多次尝试诊断这个问题,但每次我 运行 它在 PC 上它似乎 运行 完美地和 secndly 即使在一些罕见的情况下它确实触发了问题,我所能发现的是,即使CountEnemies 每次都被调用,由于一些奇怪的原因,敌人计数变量似乎没有减少或可能已经增加。

我已经通过 Visual studio 代码映射和参考跟踪代码,并且只是在代替 Awake 方法的地方我增加了变量。请帮我解决这个问题,或者至少建议我如何调试它,就像每当这个变量的值更新时附加的调试器让我知道什么的那样。

I increment this value at in the awake method of a script attached to each of my enemies object, and when and enemy dies I call a method to this gameplay controller named CountEnemies which decrement the variable and if it equals to zero ends the level.

这可能是你的问题。

唤醒可能被多次调用并导致计数增加过多的问题,导致计数与剩余敌人的实际数量脱钩。

更好的解决方案可能是使用脚本定期检查场景中当前存在的游戏对象与您的组件的数量。或者,您可以在处理当前存在的敌人时检查剩余的敌人数量(您不希望它成为 UpdateFixedUpdate 的一部分)。

FindObjectsOfType 可能是您想拨打的电话。您可以使用它来查找具有您的类型的所有对象。如果你在世界上一次没有太多的对象,使用这种方法的成本不会太重要。

基本上,关键是增加静态数字不是正确的方法,因为它很容易失控。