Unity 5对象的平移和旋转

本文关键字:旋转 对象 Unity | 更新日期: 2023-09-27 18:01:27

我在unity中遇到了一个问题,我的对象将做一个翻译,然后没有别的,我想要一系列的翻译和旋转发生,但它只做代码中的第一个翻译,不会停止,我尝试使用一个单独的函数来执行翻译,而不是更新函数,但这也不起作用,请帮助。

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);

}

Unity 5对象的平移和旋转

协程函数不应该像普通函数那样直接调用。您必须使用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时,调用协程函数。在协程函数中,翻译等待,然后旋转。我建议你在使用协程之前先了解一下协程是如何工作的。

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);
}