在 Unity 中单击一个对象之前如何启动调用函数?

How can i start the invoke function until i click one object in Unity?

在我的场景设计中,我有一个立方体,我想点击立方体开始游戏。在 Start() 函数中,我有两个调用函数,但在单击多维数据集之前我不知道如何调用它们。实际上

目前我的启动功能如下图所示。我尝试使用 IEnumerator 函数来解决这个问题。也如下图所示。在 Cube 对象中的另一个脚本中,我想在 OnMouseDown().

时更改其他脚本中的 static bool start
public class Progress : MonoBehaviour 
{
    public bool start = false;

    // Use this for initialization
    void Start()
    {
        StartCoroutine(Begin());
        Invoke("startCycle", 3);
        Invoke("startCycle", 15);
    }

    void Start()
    {
        //StartCoroutine(Begin());
        Invoke("startCycle", 3);
        Invoke("startCycle", 15);
    }


   IEnumerator Begin()
   {
        while(!start){
            yield return null;
        }
    }
}

public class CursorClick : MonoBehaviour 
{
    void OnMouseDown()
    {
        Progress.start = true;
    }
}

但是,它不起作用,即使我没有单击多维数据集,调用仍然会发生。请帮忙!

StartCoroutine(Begin());

启动 Begin() 协程但不等待它完成。由于您的 Start 被定义为 void 它只是运行所有代码而无需等待任何东西。


要么将你想要等待的调用移到协同程序中,为了更好的可读性使用 WaitUntil like

private void Start()
{
    StartCoroutine(Begin());
}

private IEnumertor Begin()
{
    return new WaitUntil(() => start);

    Invoke("startCycle", 3);
    Invoke("startCycle", 15);
}

或者 - 虽然没有真正记录 - 你可以简单地直接将 Start 本身转换成协程

private IEnumerator Start()
{
    return new WaitUntil(() => start);

    Invoke("startCycle", 3);
    Invoke("startCycle", 15);
}

如果Start实现为IEnumertorUnity内部会自动调用它作为Coroutine。您实际上可以在 Start

的示例中看到它