在 Unity 中单击一个对象之前如何启动调用函数?
How can i start the invoke function until i click one object in Unity?
在我的场景设计中,我有一个立方体,我想点击立方体开始游戏。在 Start() 函数中,我有两个调用函数,但在单击多维数据集之前我不知道如何调用它们。实际上
目前我的启动功能如下图所示。我尝试使用 IEnumerator 函数来解决这个问题。也如下图所示。在 Cube 对象中的另一个脚本中,我想在 OnMouseDown()
.
时更改其他脚本中的 static bool star
t
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
实现为IEnumertor
Unity内部会自动调用它作为Coroutine。您实际上可以在 Start
的示例中看到它
在我的场景设计中,我有一个立方体,我想点击立方体开始游戏。在 Start() 函数中,我有两个调用函数,但在单击多维数据集之前我不知道如何调用它们。实际上
目前我的启动功能如下图所示。我尝试使用 IEnumerator 函数来解决这个问题。也如下图所示。在 Cube 对象中的另一个脚本中,我想在 OnMouseDown()
.
static bool star
t
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
实现为IEnumertor
Unity内部会自动调用它作为Coroutine。您实际上可以在 Start