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