有人可以向我解释为什么我的协程工作错误吗?

问题描述 投票:0回答:1

好的,所以我做了一些学习的事情,我需要我的电梯停下来几秒钟

   private IEnumerator ReversePlatform()
    {
        yield return new WaitForSeconds(2); 
        _AccuTime = 0;
        speed = -speed;
    }

我在这里打电话,我的电梯开始摇晃并上升,他们不会下降

        if (_AccuTime > _RunTime)
        {
            StartCoroutine("ReversePlatform");
        }
        else 
        {
            transform.Translate(0, speed * Time.deltaTime, 0);
        }

我需要它们上升,停留2秒左右,然后持续下降

unity-game-engine coroutine
1个回答
0
投票

这是因为

StartCoroutine
可以多次启动同一个协程,因此您从未添加检查来确保
ReversePlatform
尚未运行:

private Coroutine reverseCoroutine;

private IEnumerator ReversePlatform()
{
    yield return new WaitForSeconds(2); 
     _AccuTime = 0;
    speed = -speed;
    reverseCoroutine = null;
}
if (_AccuTime > _RunTime)
{
    if (reverseCoroutine == null)
    {
        reverseCoroutine = StartCoroutine("ReversePlatform");
    }
}
else 
{
    transform.Translate(0, speed * Time.deltaTime, 0);
}
© www.soinside.com 2019 - 2024. All rights reserved.