【发布时间】:2016-12-04 00:38:13
【问题描述】:
在 Unity3D 中,这是我的代码:
void ActivateBuff1(){
gun.equippedGun.msPerShot /= 2;
gun.equippedGun.shotsLeftInMag += 10;
StartCoroutine (WaitRage ());
}
void ActivateBuff2(){
player.speedModifier *= 1.5f;
StartCoroutine (WaitSpeed ());
}
IEnumerator WaitRage(){
yield return new WaitForSeconds(powerUpDuration);
gun.equippedGun.msPerShot *= 2;
}
IEnumerator WaitSpeed(){
yield return new WaitForSeconds(powerUpDuration);
player.speedModifier /= 1.5f;
}
每当玩家遇到上电时,都会调用一个 ActivateBuff 方法。显然,powerUps 效果不会永远持续下去,所以我在等待一定秒数后使用IEnumerators 来扭转我原来方法的效果。但由于某种原因,IEnumerators 中的代码永远不会被调用。请帮助...(请提出另一种编码方式,也许我知道它不是很干净)
【问题讨论】:
-
您是否通过日志记录/调试确定所有导致启动协程的代码都被调用了?并在
WaitForSeconds之前记录以确定是否正在输入协程? -
我想你的 powerUpDuration 设置在你的代码的其他地方?您已经发现在调试器中调用了 ActivateBuff1 和 ActivateBuff2?
-
您能否在您的代码中添加 cmets 来提示哪些部分正在被击中,哪些没有被击中,哪些应该被击中?我有点想不通,我有点累了哈哈..
-
是的,一切都被称为 Serlite,除了 IENnumerator 中的代码似乎没有运行......
-
嗯......这是一个不同的故事 - 它非常固执己见。对于更简单的代码,你可以使用
Invoke()来延迟重置播放器属性,这样powerUpDuration和reset方法之间的关系就更清楚了。还可以为您节省几行代码。