让角色面对相反的方式(2D)

时间:2017-01-02 15:09:59

标签: unity3d

我试图建立一个移动两秒钟然后面向相反方向的敌人,等等

但是,在编码时,我不能让角色向左走,它会被卡住。

public class EnemyController : MonoBehaviour {

public int speed = 2;

void Start () 
{
}

void Update () 
{
    float auto = Time.deltaTime * speed;
    transform.Translate (auto, 0, 0);
    StartCoroutine(Animate ());
}

IEnumerator Animate()
{
    yield return new WaitForSeconds (2);
    transform.rotation = Quaternion.LookRotation (Vector3.back);
    speed *= -1;
    yield return new WaitForSeconds (2);
    transform.rotation = Quaternion.LookRotation (Vector3.forward);
    speed *= -1;
}
}

video of the problem

1 个答案:

答案 0 :(得分:4)

当您开始使用Coroutine时,您需要在新主题中启动它,这意味着您每次更新()时都会执行新的 Animate() 运行,每秒约60次。

这就是它开始工作的原因,但是一旦有120个Animate()实例告诉精灵一直转身,你会得到一些非常奇怪的行为。

我认为你想要的是在你的Start()方法中加入 StartCoroutine(Animate()); 并更改 Animate()中的代码来实现它循环直到单位死亡或其他状态。

void Start() 
{
    StartCoroutine(Animate());
}


IEnumerator Animate()
{
    while(true)
    {
        yield return new WaitForSeconds (2);
        transform.rotation = Quaternion.LookRotation (Vector3.back);
        speed *= -1;
        yield return new WaitForSeconds (2);
        transform.rotation = Quaternion.LookRotation (Vector3.forward);
        speed *= -1;
    }
}

当然,删除" StartCoroutine(Animate());"来自Update()。