我有一个播放器类,它有一个public float reviveTimer。因此,当一名玩家被击倒时,另一名玩家可以去唤醒他们,这会为被击倒的玩家启动一个协同线,以增加复活计时器,直到恢复到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;
}
}发布于 2018-07-16 21:30:49
被击倒的玩家应该储存复活计时器。复活玩家应该调用一个public revive()方法来获取被击倒的玩家的计时器。恢复方法应该检查计时器上的剩余时间,并相应地更新它。恢复方法应该从被击倒的玩家的代码中调用。这样,被击倒的玩家负责在内部维护自己的计时器,而其他玩家则通过公共方法访问它。如果您使用协同线来处理计时,只需让coroutines (在被击落的播放器中)访问它的计时器。
https://stackoverflow.com/questions/51370052
复制相似问题