我有一个具有public float reviveTimer
的Player类。因此,当一个玩家被击倒时,另一位玩家可以恢复他们的生命,这将为被击倒的玩家启动协程,从而增加复活计时器,直到达到10。
在某些情况下,如果一个球员恢复被击倒的球员,5秒后第二个球员恢复了那个被击倒的球员,而在第一个球员离开后1秒,第二个球员应该继续恢复剩下6秒钟(5 + 1),而不是从最初的启动器离开后重新启动计时器。因此,当第二个玩家进来复活被击倒的玩家时,他们需要知道复活计时器是在5秒时。
因此,我做了一些简单的事情,如timer = downedPlayer.reviveTimer;
。
但是,无论实际计时器设置为什么,它总是返回0,好像我无法检索协程中reviveTimer
设置为什么。
那么我还是应该如何检索协程中设置的reviveTimer
的值?
编辑:
根据要求,添加代码。当玩家被击倒时,这就是被击倒的玩家运行的协程。
IEnumerator ReviveMeTimer()
{
while (reviveTimer < 10)
{
reviveTimer += Time.deltaTime;
reviveIndicatorTimer.text = ((int)reviveTimer).ToString();
reviveIndicatorImage.fillAmount = reviveTimer / 10;
yield return null;
}
}
答案 0 :(得分:3)
被击倒的玩家应该存储复兴计时器。复活的玩家应该调用public revive()
方法来获取被打倒玩家的计时器。 Revive方法应检查计时器剩余的时间并相应地进行更新。 Revive方法应从被击倒的玩家代码中调用。这样一来,被打倒的玩家将负责在内部维护自己的计时器,而其他玩家则可以通过公共方法访问它。如果您使用协程来处理时间,只需让协程(在被打倒的播放器中)访问其计时器即可。
答案 1 :(得分:3)
亚当B本质上是正确的。我只想指出原因是因为这条线:
timer = downedPlayer.reviveTimer;
由于您获得了计时器值并将其存储在本地变量中,因此您实际上并没有更新被淘汰玩家的reviveTimer
。您正在操纵名为timer
的局部变量,这就是为什么它似乎与第二位帮助玩家不同步的原因。
通常可以通过简单地一起删除局部变量来解决此问题,但是这将使两名玩家帮助被压倒的玩家,他们的起床速度会更快(10秒除以助手数量)。因此,在您的详细情况下,第一个玩家将离开,第二个玩家将剩下3秒,而不是4秒:
注意:问题说的是“ 6秒”,但它是将 up 计为10,但表示此值为剩余的值,直到10。 / sub>
1 player for 5 seconds: +5
2 players for 1 second: +2
Total: +7
因为和都在运行协程。
解决此问题的唯一方法是亚当·B(Adam B)说:让downedPlayer
的代码处理计时器(但您不希望revive()
方法对其进行修改!)。