我在团结中有一个问题,我的对象将进行翻译,然后没有别的,我想要一系列的翻译和旋转发生,但它只在代码中进行第一次翻译并且不会停止,我尝试使用单独的函数来执行翻译而不是更新功能,但这也不起作用,请帮忙。
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 :(得分: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
时,您调用协程函数。在协同程序功能中,您翻译,等待然后旋转。我建议您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);
}