unity3d Unity 3D中进程的时间延迟

tyky79it  于 2023-01-02  发布在  其他
关注(0)|答案(3)|浏览(119)

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

bq8i3lrv

bq8i3lrv1#

我不是很清楚你想要达到什么目的,但是我可以告诉你如何设置一个协同程序的时间延迟。在这个例子中,让我们使用一个简单的冷却,就像你在例子中设置的一样。假设你想在游戏运行时每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;
}

如果我已经完全错过了标记,那么请更新问题与更详细的关于你正在尝试完成。

yhxst69z

yhxst69z2#

我不是100%确定我理解了你的问题,但是如果你想在一个对象越界时启动另一个对象,那么只需在第一个对象中引用第二个对象,当第一个对象越界时(在第一个对象的更新中检查),在第二个对象上调用某个公共函数StartMove。

62lalag4

62lalag43#

我不建议使用协同例程。它有时会使你的计算机崩溃。只要定义一个变量并递减它就行了。例如:

private float seconds = 5;

然后做任何你想推迟的事情:

seconds -= 1 * Time.deltaTime;
if(seconds <= 0) {your code to run}

这将产生5秒的延迟。您可以将5更改为任何值来更改秒数。您还可以通过更改值1来加快递减速度。(当您希望使用同一个变量同步2个延迟的操作时,这非常有用)
希望这对你有帮助。快乐编码:)

相关问题