2016-08-09 1 views
0

У меня возникла проблема в единстве, где мой объект будет делать перевод, а затем ничего больше, я хочу, чтобы последовательность переводов и поворотов происходила, но это делает только первый перевод в коде и не будет stop, я попытался использовать отдельную функцию для выполнения перевода вместо функции обновления, но это тоже не помогло, пожалуйста, помогите.Unity 5 Перевод и ротация объектов

void Update() 
{ 
    if (enemyHit == false) 
    { 
     //enemy moving 
     transform.LookAt(TTarget); 


    } 
    else if (enemyHit == true) 
    { 
     Debug.Log (enemyHit); 

     Evade(); 
    } 
} 

IEnumerator Wait(float duration) 
{ 
    yield return new WaitForSeconds(duration); 
} 

void Evade() 
{ 
    transform.Translate(Vector3.back * Time.deltaTime * movementSpeed); 
    Wait(2); 
    transform.Rotate(0,90,0); 



} 
+0

В зависимости от значения 'enemyHit', вы можете называть' transform.LookAt' один раз за кадр, который будет иметь тенденцию перезаписать любые другие повороты, что вы пытаетесь сделать. – rutter

+0

Рассматривая ваш новый вопрос, похоже, что мой ответ решил вашу проблему. Вы можете пойти и принять мой ответ. – Programmer

ответ

1

Функция сопроцесса не должна называться непосредственно как обычная функция. Вы должны использовать StartCoroutine, чтобы позвонить ему.

void Evade() 
{ 
    transform.Translate(Vector3.back * Time.deltaTime * movementSpeed); 
    StartCoroutine(Wait(2);); 
    transform.Rotate(0,90,0); 
} 

Даже если вы исправите это, теперь будет вызываться функция rotae, но не ожидается 2 секунды. Это потому, что нормальная функция не делает и не будет ждать сопрограммной функции, чтобы вернуться, если функция сопрограммной имеет yield return null или yield return new WaitForSomething .....

Это то, что вы должны сделать:

Вы вызываете функцию сопрограммы когда enemyHit является true. Внутри функции сопрограммы, вы перевести, wait затем повернуть. Я предлагаю вам learn о сопрограмме и понять, как она работает до ее использования.

void Update() 
{ 
    if (enemyHit == false) 
    { 
     //enemy moving 
     transform.LookAt(TTarget); 


    } 
    else if (enemyHit == true) 
    { 
     Debug.Log(enemyHit); 
     StartCoroutine(Evade(2)); 
    } 
} 

IEnumerator Evade(float duration) 
{ 
    transform.Translate(Vector3.back * Time.deltaTime * movementSpeed); 
    yield return new WaitForSeconds(duration); 
    transform.Rotate(0, 90, 0); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^