在 Unity 中同时重生 2 个玩家对象
Respawning 2 player objects at the same time in Unity
我正在 Unity 中创建竞技场风格的战斗游戏,但我遇到了重生玩家的问题。这是它现在的工作方式。
当一个玩家被杀死时,它被放入一个被杀死的玩家列表中以重生并且它的玩家对象被销毁。然后游戏循环遍历被杀死的玩家列表并选择一个随机可用的出生点,然后在那里重生玩家。可用重生点是任何重生点,它不是由位于其重生区域内的玩家触发的。
当 2 名玩家同时死亡,或者至少非常接近同一时间并且随机选择的重生点最终相同时,问题就出现了,因为它没有足够的时间来处理触发.发生这种情况时,所有 unity 都会崩溃,我必须完全重新启动它。
我假设为了解决这个问题,我需要防止 Unity 同时生成它们,但我认为可以通过遍历列表来解决这个问题。我实际上应该如何更安全地生成 2 个同时死亡的玩家?
这是经典的队列示例,同样的事情也发生在多线程应用程序中。您可以在这里做两件事:
- 转移关注
- 消除开头的冲突
在第一种方法中,你在玩家脚本之外创建一个脚本,例如在它自己的竞技场中,并在那里创建一个方法到 select 下一个重生点。这可以是顺序的而不是随机的,每个玩家在死亡时要求脚本 select 它的下一个生成点并且没有一点冲突。
在第二种方法中,每个玩家都会有自己的生成点,例如与竞技场中定义的生成点的偏移量。例如,玩家 1 的偏移量为 0 并在生成点右侧生成,然后玩家 2 的偏移量为 1,它将在生成点之外生成 1 个单位。
如果人数有限,我更喜欢第一种方法。如果你有很多玩家,那么队列可能会很麻烦。
希望对您有所帮助:)
我解决了我的问题,并且我可以用随机重生点来解决这个问题。这个问题显然与 2 名玩家同时死亡无关,而与一名玩家在重生点死亡有关。当这种情况发生时,它不会 运行 OnTriggerLeave() 方法,因此即使那里什么也没有,也不会算作可用的重生点。
我通过让每个重生点保存所有触发它的游戏对象的列表来修复它,该列表会随着玩家进入和退出 space 而改变。然后,当玩家被杀死时,它会检查每个重生点的列表,看它是否包含玩家的游戏对象。如果它找到匹配项,那么我会取消触发重生点,它会显示为可用。
一个更好的方法是检查列表以查看生成点列表中是否有任何游戏对象,并且只有在 none 存在时才可用。因为目前的方式不考虑其他对象也触发点。
我正在 Unity 中创建竞技场风格的战斗游戏,但我遇到了重生玩家的问题。这是它现在的工作方式。
当一个玩家被杀死时,它被放入一个被杀死的玩家列表中以重生并且它的玩家对象被销毁。然后游戏循环遍历被杀死的玩家列表并选择一个随机可用的出生点,然后在那里重生玩家。可用重生点是任何重生点,它不是由位于其重生区域内的玩家触发的。
当 2 名玩家同时死亡,或者至少非常接近同一时间并且随机选择的重生点最终相同时,问题就出现了,因为它没有足够的时间来处理触发.发生这种情况时,所有 unity 都会崩溃,我必须完全重新启动它。
我假设为了解决这个问题,我需要防止 Unity 同时生成它们,但我认为可以通过遍历列表来解决这个问题。我实际上应该如何更安全地生成 2 个同时死亡的玩家?
这是经典的队列示例,同样的事情也发生在多线程应用程序中。您可以在这里做两件事:
- 转移关注
- 消除开头的冲突
在第一种方法中,你在玩家脚本之外创建一个脚本,例如在它自己的竞技场中,并在那里创建一个方法到 select 下一个重生点。这可以是顺序的而不是随机的,每个玩家在死亡时要求脚本 select 它的下一个生成点并且没有一点冲突。
在第二种方法中,每个玩家都会有自己的生成点,例如与竞技场中定义的生成点的偏移量。例如,玩家 1 的偏移量为 0 并在生成点右侧生成,然后玩家 2 的偏移量为 1,它将在生成点之外生成 1 个单位。
如果人数有限,我更喜欢第一种方法。如果你有很多玩家,那么队列可能会很麻烦。
希望对您有所帮助:)
我解决了我的问题,并且我可以用随机重生点来解决这个问题。这个问题显然与 2 名玩家同时死亡无关,而与一名玩家在重生点死亡有关。当这种情况发生时,它不会 运行 OnTriggerLeave() 方法,因此即使那里什么也没有,也不会算作可用的重生点。
我通过让每个重生点保存所有触发它的游戏对象的列表来修复它,该列表会随着玩家进入和退出 space 而改变。然后,当玩家被杀死时,它会检查每个重生点的列表,看它是否包含玩家的游戏对象。如果它找到匹配项,那么我会取消触发重生点,它会显示为可用。
一个更好的方法是检查列表以查看生成点列表中是否有任何游戏对象,并且只有在 none 存在时才可用。因为目前的方式不考虑其他对象也触发点。