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

本文关键字:条件 游戏结束 Unity3d | 更新日期: 2023-09-27 18:36:56

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

这是我的 CountEnemies methid 的代码,由敌人类调用:

    GameplayController.instance.CountEnemies();

其中,实例仅返回游戏控制器的单例实例。

这是我的 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 上运行它时,它似乎都能完美无缺地运行,即使在极少数情况下它确实触发了问题,我所能发现的是,即使 CountEnemies 在每一个转弯处都被调用,通过一些奇怪的原因,敌人计数变量似乎没有减少或可能已经增加。

我通过Visual studio代码图和引用跟踪代码,并且仅在Awake方法之外递增变量。请帮我解决这个问题,或者至少建议我如何调试它,就像每当这个变量的值更新附加的调试器让我知道什么一样。

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

我在附加到每个敌人对象的脚本的唤醒方法中增加此值,当敌人死亡时,我向这个游戏控制器调用一个名为 CountEnemies 的方法,该方法递减变量,如果它等于零结束关卡。

这可能是你的问题。

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

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

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

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