C# 在统一中同时重生2个玩家对象

C# 在统一中同时重生2个玩家对象,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我正在创建一个统一的竞技场风格的战斗游戏,我有一个重生的球员的问题。下面是它现在的工作原理 当一个玩家被杀死时,它会被放入一个被杀死的玩家列表中,然后被重生,它的玩家对象也会被销毁。然后,游戏在被杀玩家列表中循环,选择一个随机可用的产卵点,然后在那里重生玩家。一个可用的繁殖点是任何不是由玩家在其繁殖区域内触发的繁殖点 当两个玩家同时死亡,或者至少非常接近于同一时间,并且随机选择的繁殖点最终是相同的,因为它没有足够的时间来处理触发。当这种情况发生时,所有unity都崩溃了,我必须完全重新启动它 我

我正在创建一个统一的竞技场风格的战斗游戏,我有一个重生的球员的问题。下面是它现在的工作原理

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

当两个玩家同时死亡,或者至少非常接近于同一时间,并且随机选择的繁殖点最终是相同的,因为它没有足够的时间来处理触发。当这种情况发生时,所有unity都崩溃了,我必须完全重新启动它


我假设为了解决这个问题,我需要防止Unity同时产生它们,但我认为通过循环列表可以解决这个问题。我应该怎样才能更安全地繁殖两个同时死亡的玩家呢

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

  • 转移关注
  • 从一开始就消除冲突
  • 在第一种方法中,您在玩家脚本之外创建一个脚本,例如在竞技场中创建一个脚本,然后在那里创建一个方法来选择下一个繁殖点。这可以是有序的,而不是随机的,每个玩家在死后都会要求脚本为其选择下一个繁殖点,并且在一个点上没有冲突

    在第二种方法中,每个玩家都有自己的繁殖点,例如,从竞技场中定义的繁殖点的偏移量。例如,玩家1的偏移量为零,在产卵点右侧产卵,然后玩家2的偏移量为1,将从产卵点产卵1个单位

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


    希望有帮助:)

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

  • 转移关注
  • 从一开始就消除冲突
  • 在第一种方法中,您在玩家脚本之外创建一个脚本,例如在竞技场中创建一个脚本,然后在那里创建一个方法来选择下一个繁殖点。这可以是有序的,而不是随机的,每个玩家在死后都会要求脚本为其选择下一个繁殖点,并且在一个点上没有冲突

    在第二种方法中,每个玩家都有自己的繁殖点,例如,从竞技场中定义的繁殖点的偏移量。例如,玩家1的偏移量为零,在产卵点右侧产卵,然后玩家2的偏移量为1,将从产卵点产卵1个单位

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


    希望它有帮助:)

    我解决了我的问题,我可以用随机繁殖点来保持它。这个问题显然与两名玩家同时死亡无关,而与一名玩家在一个点上死亡有关。发生这种情况时,它不会运行onTiggerLeave()方法,因此即使没有任何可用的生成点,也不会将其计算为可用的生成点

    我修正了这个问题,让每个繁殖点都有一个触发它的所有游戏对象的列表,这些对象会随着玩家进出空间而改变。然后当玩家被杀时,它会检查每个点的列表,看看是否包含玩家的游戏对象。如果它找到了匹配项,那么我将取消对繁殖点的迁移,它将显示为可用


    我将要做的一个更好的方法是检查列表,看看在繁殖点的列表中是否有任何游戏对象,并且只有在没有游戏对象的情况下才可用。因为当前方式不考虑其他对象也会触发该点。

    我解决了我的问题,并且能够使用随机生成点来保持它。这个问题显然与两名玩家同时死亡无关,而与一名玩家在一个点上死亡有关。发生这种情况时,它不会运行onTiggerLeave()方法,因此即使没有任何可用的生成点,也不会将其计算为可用的生成点

    我修正了这个问题,让每个繁殖点都有一个触发它的所有游戏对象的列表,这些对象会随着玩家进出空间而改变。然后当玩家被杀时,它会检查每个点的列表,看看是否包含玩家的游戏对象。如果它找到了匹配项,那么我将取消对繁殖点的迁移,它将显示为可用

    我将要做的一个更好的方法是检查列表,看看在繁殖点的列表中是否有任何游戏对象,并且只有在没有游戏对象的情况下才可用。因为当前方式不考虑其他也触发该点的对象