Unity 3D中进程的时间延迟

时间:2012-01-03 04:09:25

标签: unity3d unityscript

我必须延迟进程,我在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()中给出代码时正在移动的对象正在移动,但是没有停止。它正在上下移动。我不知道发生了什么!有人可以帮忙吗?拜托,谢谢。

3 个答案:

答案 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个延迟动作时,这非常有用)

希望这会有所帮助。快乐的编码:)