定时器功能不起作用(Unity + C#)

时间:2018-03-14 17:21:28

标签: c# unity3d

我编写了自己的旋转一组对象的功能。我想要一个新的,旋转平滑,所以我需要一个计时器。我试过几次调用Timer,但它不起作用。这是我的代码:

public class rotate_around : MonoBehaviour 
{
    public Transform sphere;        

    // Update is called once per frame
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            sphere.RotateAround(new Vector3(3, 3, 3), new Vector3(0, 1, 0), 45);
            timer();
        }
    }        

    public IEnumerator timer()
    {
        yield return new WaitForSeconds(5);
        // actually I tried to add Debug.Log("blahblahblah") here, but it still didnt output anything
    }
}

3 个答案:

答案 0 :(得分:3)

尝试使用StartCoroutine(timer());而非timer();

答案 1 :(得分:1)

StartCoroutine("timer", true);

是最好的方法!

timer()只会调用普通方法。 IEnumerator的工作方式不同。

答案 2 :(得分:0)

如前所述,启动协程的正确方法是StartCoroutine(timer());

从您的代码中不清楚您要实现的目标,目前您在等待这五秒后什么都不做

此外,您可能应该实施某种阻止用户发送协同程序垃圾邮件的机制。你可以设置一个bool标志,或者保持对你开始的协程的引用 - 我经常这样做

Coroutine myRoutine; // in global scope
if (myRoutine==null) myRoutine=StartCoroutine(timer()); // in event handler

myRoutine在完成后将自动为空