2016-08-09 168 views
0

我有一个统一的问题,我的对象将做翻译,然后没有别的,我想要一系列的翻译和旋转发生,但它只做代码中的第一次翻译,并将停止,我尝试使用单独的函数来执行翻译,而不是更新功能,但这也不起作用,请帮助。统一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 nullyield return new WaitForSomething .....

这是你应该做的:

你叫协程功能时enemyHittrue。在协同函数内部,你翻译,等待然后旋转。我建议你关于协程的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); 
}