Unity3d Unity获取在协同程序中设置的值

Unity3d Unity获取在协同程序中设置的值,unity3d,coroutine,Unity3d,Coroutine,我有一个Player类,它有一个公共浮动回复器。因此,当一名玩家被击倒时,另一名玩家可以去复活他们,这将为被击倒的玩家启动一个协同程序,增加复活计时器直到达到10 在这种情况下,如果一名玩家去救起一名被击倒的玩家,5秒钟后第二名玩家来救起同一名被击倒的玩家,在第一名玩家离开后1秒钟,第二名玩家应在还剩6秒(5+1)的情况下继续救起过程,而不是在原发令手离开后重新启动计时器。因此,当第二个玩家进来复活被击倒的玩家时,他们需要知道复活计时器是5秒 因此,我做了一些简单的事情,比如timer=down

我有一个Player类,它有一个
公共浮动回复器
。因此,当一名玩家被击倒时,另一名玩家可以去复活他们,这将为被击倒的玩家启动一个协同程序,增加复活计时器直到达到10

在这种情况下,如果一名玩家去救起一名被击倒的玩家,5秒钟后第二名玩家来救起同一名被击倒的玩家,在第一名玩家离开后1秒钟,第二名玩家应在还剩6秒(5+1)的情况下继续救起过程,而不是在原发令手离开后重新启动计时器。因此,当第二个玩家进来复活被击倒的玩家时,他们需要知道复活计时器是5秒

因此,我做了一些简单的事情,比如
timer=downedPlayer.revieveTimer。
但是,无论实际计时器设置为什么,它总是返回0,就好像我无法检索到协同程序中设置的
reviveTimer
一样

那么,我如何或者可以检索在协同程序中设置的
reviveTimer
的值呢

编辑:

根据请求,添加代码。当玩家被击倒时,这是被击倒玩家运行的协同程序

    IEnumerator ReviveMeTimer()
    {
        while (reviveTimer < 10)
        {
            reviveTimer += Time.deltaTime;
            reviveIndicatorTimer.text = ((int)reviveTimer).ToString();
            reviveIndicatorImage.fillAmount = reviveTimer / 10;
            yield return null;
        }
    }
IEnumerator-timer()
{
而(还原剂<10)
{
reviveTimer+=Time.deltaTime;
revieveIndicatorTimer.text=((int)revieveTimer.ToString();
reviveIndicatorImage.fillAmount=REVIVEITIMER/10;
收益返回空;
}
}

被击倒的玩家应该存储恢复计时器。复活玩家应该调用一个
public reserve()
方法来获取被击倒玩家的计时器。Resove方法应该检查计时器还剩多长时间,并相应地更新它。应该从被击倒玩家的代码中调用REVOVE方法。这样,被击倒的玩家负责在内部维护自己的计时器,而其他玩家则通过公共方法访问计时器。如果您使用协同程序来处理计时,只需让协同程序(在被击落的播放器中)访问其计时器即可

被击倒的玩家应该储存复活计时器。复活玩家应该调用一个
public reserve()
方法来获取被击倒玩家的计时器。Resove方法应该检查计时器还剩多长时间,并相应地更新它。应该从被击倒玩家的代码中调用REVOVE方法。这样,被击倒的玩家负责在内部维护自己的计时器,而其他玩家则通过公共方法访问计时器。如果您使用协同程序来处理计时,只需让协同程序(在被击落的播放器中)访问其计时器即可

亚当B基本上是正确的。我只想指出,这是因为这一行:

timer = downedPlayer.reviveTimer;
因为您获取计时器值并将其存储在一个局部变量中,所以实际上并不是在更新被击倒的玩家的
revieveTimer
。您正在操作一个名为
timer
的局部变量,这就是为什么它似乎没有与第二个帮助播放器同步

名义上,这可以通过简单地删除所有的局部变量来解决,但是这会让两个玩家帮助被击倒的玩家,他们会起得更快(10秒除以帮助者的数量)。因此,在您的详细场景中,第一个玩家将离开,第二个玩家将看到剩下3秒,而不是4秒:

注意:问题说的是“6秒”,但它是朝着10计数的,但说这个值是达到10的剩余值

因为两个协同程序都将运行


解决这一问题的唯一方法是Adam B所说的:让
downedPlayer的代码处理计时器(但您不希望
Resove()
方法修改它!)。

Adam B基本上是正确的。我只想指出,这是因为这一行:

timer = downedPlayer.reviveTimer;
因为您获取计时器值并将其存储在一个局部变量中,所以实际上并不是在更新被击倒的玩家的
revieveTimer
。您正在操作一个名为
timer
的局部变量,这就是为什么它似乎没有与第二个帮助播放器同步

名义上,这可以通过简单地删除所有的局部变量来解决,但是这会让两个玩家帮助被击倒的玩家,他们会起得更快(10秒除以帮助者的数量)。因此,在您的详细场景中,第一个玩家将离开,第二个玩家将看到剩下3秒,而不是4秒:

注意:问题说的是“6秒”,但它是朝着10计数的,但说这个值是达到10的剩余值

因为两个协同程序都将运行


解决这一问题的唯一方法是Adam B所说的:让
downedPlayer
的代码处理计时器(但你不希望
Resove()
方法修改它!)。

请尽可能发布你的协同程序和其他相关代码。请尽可能发布你的协同程序和其他相关代码。因此,我添加了代码片段,被击倒的玩家可以控制自己的计时器。因此,当我执行line timer=downedPlayer.revieveTimer时,试图执行恢复的玩家正在尝试获取被击倒玩家的当前计时器。假设被击倒玩家的当前计时器为5,这一行:(timer=downedPlayer.revieveTimer)应该返回5,但它不返回。它总是返回0。对于您发布的代码,您根本不需要
timer=downedPlayer.reviveTimer
。您仍然没有包含代码的这一部分。timer变量属于要复活死亡玩家的玩家,因此该玩家需要知道死亡玩家的计时器。但多亏了你们两个的帮助,我终于成功了。谢谢。所以,通过我添加的代码片段,被击倒的播放器可以控制自己的计时器。因此,当我执行line timer=downedPlayer.revieveTimer时,试图执行恢复的玩家正在尝试获取被击倒玩家的当前计时器。因此,让我们假设