每次我运行这段代码并按下"d“键时,Unity都会崩溃。这让我相信这是一个逻辑错误,但我不知道哪里出了问题。
private var delayAmount = 5.0;
private var timeDelay = 0.0;
private var abilityEnd = 0.0;
public var abilityDuration = 5.0;
public var speed = 2.0;
function Update()
{
if (Input.GetKey ("d") && Time.time > timeDelay)
{
abilityEnd = Time.time + abilityDuration;
while(abilityEnd > Time.time)
{
transform.Translate(0, 0, Time.deltaTime * speed);
}
timeDelay = Time.time + delayAmount;
}
}发布于 2016-08-02 01:00:33
使用if语句而不是while循环,因为循环不会中断,unity重载和崩溃(不要引用我的话,我不是专家,这只是我的解释)。
发布于 2016-08-02 03:04:41
这里发生的情况是,当它进入while时,它会在无限循环中停留,因为Time.time不能更改!您只需通过输入while就可以阻止引擎本身,而while依赖于一个可能无法更新的值。
您必须通过允许引擎退出Update方法来改变您的方法。处理这些场景的常见方法是使用大量的协同例程和执行信号量。
https://stackoverflow.com/questions/38697665
复制相似问题