Задержка процесса в Unity 3D - PullRequest
0 голосов
/ 03 января 2012

Я должен указать задержку для процесса, который я вызываю в функции обновления.Я попробовал обходной путь 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 голосов
/ 12 октября 2013

Я бы не советовал CoRoutines.Иногда это может привести к поломке вашего компьютера.Просто определите переменную и уменьшите ее.Пример:

private float seconds = 5;

затем выполните в любом месте, которое вы хотите отложить:

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

Это сделает задержку 5 секунд.Вы можете изменить 5 на любое значение, чтобы изменить количество секунд.Также вы можете ускорить уменьшение, изменив значение 1. (Это особенно полезно, когда вы хотите синхронизировать 2 отложенных действия, используя ту же переменную)

Надеюсь, это поможетУдачного кодирования:)

0 голосов
/ 19 октября 2016

Я не уверен на 100%, что понимаю ваш вопрос, но если вы хотите, чтобы один объект двигался, когда другой находится вне границы, просто сделайте ссылку в первом объекте на второй объект, и когда первый объектза пределами (проверьте это в обновлении первого объекта) вызовите некоторую открытую функцию StartMove для второго объекта.

0 голосов
/ 04 января 2012

Мне не совсем понятно, чего вы пытаетесь достичь, но я могу показать вам, как настроить задержку времени для сопрограммы. Для этого примера давайте поработаем с простым охлаждением, так же, как вы настроили в своем примере. Предполагая, что вы хотите постоянно что-то делать каждые 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;
}

Если я полностью пропустил оценку, пожалуйста, обновите вопрос с более подробной информацией о том, что вы пытаетесь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...