Unity 5对象转换和旋转

时间:2016-08-09 16:07:16

标签: c# object unity3d rotation translate

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

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



}

1 个答案:

答案 0 :(得分: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);
}