【问题标题】:Unity 5 Object translation and rotationUnity 5 对象平移和旋转
【发布时间】:2016-08-10 00:34:15
【问题描述】:

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

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



}

【问题讨论】:

  • 根据enemyHit 的值,您可能每帧调用一次transform.LookAt,这往往会覆盖您尝试执行的任何其他旋转。
  • 看看你的新问题,看来我的回答解决了你的问题。你可以继续接受我的回答。

标签: c# object unity3d rotation translate


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2020-11-12
    • 2013-09-27
    相关资源
    最近更新 更多