【问题标题】:Respawning 2 player objects at the same time in Unity在 Unity 中同时重生 2 个玩家对象
【发布时间】:2017-04-19 05:40:30
【问题描述】:

我正在 Unity 中创建一个竞技场风格的战斗游戏,但我在重生玩家时遇到了问题。下面是它现在的工作原理。

当一个玩家被杀死时,它会被放入一个被杀死的玩家列表中以被重生,并且它的玩家对象被销毁。然后游戏循环遍历被杀死的玩家列表并选择一个随机可用的重生点,然后在那里重生玩家。可用的重生点是指任何不在其重生区域内的玩家触发的重生点。

当 2 名玩家同时死亡,或者至少非常接近同时死亡并且随机选择的出生点最终相同时,问题就出现了,因为它没有足够的时间来处理触发。当这种情况发生时,所有的统一崩溃,我必须完全重新启动它。

我假设为了解决这个问题,我需要阻止 Unity 同时生成它们,但我认为这可以通过循环遍历列表来解决。我实际上应该如何更安全地生成 2 个同时死亡的玩家?

【问题讨论】:

    标签: c# unity3d game-physics


    【解决方案1】:

    这是经典的队列示例,在多线程应用程序中也会发生同样的事情。您可以在这里做两件事:

    1. 转移关注
    2. 从一开始就消除冲突

    在第一种方法中,您在玩家脚本之外创建一个脚本,例如在它自己的竞技场中创建一个方法来选择下一个生成点。这可以是顺序的而不是随机的,并且每个玩家在死亡时都会要求脚本为其选择下一个生成点,并且不会在一个点上发生冲突。

    在第二种方法中,每个玩家都有自己的生成点,例如与竞技场中定义的生成点的偏移量。例如,玩家 1 的偏移量为 0 并在生成点右侧生成,然后玩家 2 的偏移量为 1,这将生成距离生成点 1 个单位的位置。

    如果玩家人数有限,我更喜欢第一种方法。如果你有很多玩家,那么排队可能会很麻烦。

    希望对你有帮助:)

    【讨论】:

      【解决方案2】:

      我发现了我的问题,并且我能够使用随机生成点来保留它。这个问题显然与 2 名玩家同时死亡无关,而与一名玩家在重生点死亡有关。发生这种情况时,它不会运行 OnTriggerLeave() 方法,因此即使没有任何内容,也不会算作可用的生成点。

      我通过让每个生成点保存所有触发它的游戏对象的列表来修复它,这些对象会随着玩家进入和退出空间而改变。然后当玩家被杀时,它会检查每个生成点的列表,看它是否包含玩家的游戏对象。如果它找到匹配项,那么我会取消触发生成点,它会显示为可用。

      我将要做的更好的方法是检查列表以查看生成点列表中是否有任何游戏对象,并且只有在没有游戏对象时才可用。因为目前的方式没有考虑到其他物体也触发了这个点。

      【讨论】:

        猜你喜欢
        • 2016-12-21
        • 2015-11-20
        • 2023-04-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多