我试图建立一个移动两秒钟然后面向相反方向的敌人,等等
但是,在编码时,我不能让角色向左走,它会被卡住。
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;
}
}
答案 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()。