我必须延迟进程,我在Update函数中调用。 我也尝试过CoUpdate解决方法。这是我的代码: -
function Start()
{
StartCoroutine("CoStart");
}
function CoStart() : IEnumerator
{
while(true)
{
yield CoUpdate();
}
}
function CoUpdate()
{
//I have placed the code of the Update().
//And called the wait function wherever needed.
}
function wait()
{
checkOnce=1; //Whenever the character is moved.
yield WaitForSeconds(2); //Delay of 2 seconds.
}
当第三人控制器(另一个对象)移出边界时,我必须移动一个对象。我在我的代码中包含了“yield”。但是,发生的问题是:当我在Update()中给出代码时正在移动的对象正在移动,但是没有停止。它正在上下移动。我不知道发生了什么!有人可以帮忙吗?拜托,谢谢。
答案 0 :(得分:0)
我并不完全清楚你想要完成什么,但我可以告诉你如何设置一个协程的时间延迟。对于此示例,让我们使用简单的冷却,就像您在示例中设置的那样。假设您希望在游戏运行期间每2秒钟继续执行一些操作,则可以对您的代码进行轻微修改。
function Start()
{
StartCoroutine(CoStart);
}
function CoStart() : IEnumerator
{
while(true)
{
//.. place your logic here
// function will sleep for two seconds before starting this loop again
yield WaitForSeconds(2);
}
}
您还可以使用其他逻辑计算等待时间
function Start()
{
StartCoroutine(CoStart);
}
function CoStart() : IEnumerator
{
while(true)
{
//.. place your logic here
// function will sleep for two seconds before starting this loop again
yield WaitForSeconds(CalculateWait());
}
}
function CalculateWait() : float
{
// use some logic here to determine the amount of time to wait for the
// next CoStart cycle to start
return someFloat;
}
如果我完全错过了商标,请更新问题,详细了解您要完成的工作。
答案 1 :(得分:0)
我不是100%确定我理解你的问题,但如果你想在另一个物体超出约束时开始移动一个物体,那么只需在第一个物体中引用第二个物体,当第一个物体出现时越界(在第一个对象的更新中检查)在第二个对象上调用一些公共函数StartMove。
答案 2 :(得分:-1)
我不建议使用CoRoutines。它有时会使您的计算机崩溃。只需定义一个变量并减少它。例如:
private float seconds = 5;
然后做任何你想要延迟的事情:
seconds -= 1 * Time.deltaTime;
if(seconds <= 0) {your code to run}
这将延迟5秒。您可以将5更改为任何值以更改秒数。您还可以通过更改值1来加快减量。(当您想通过使用相同的变量同步2个延迟动作时,这非常有用)
希望这会有所帮助。快乐的编码:)