Unity3d 使角色面向相反方向(2D)

Unity3d 使角色面向相反方向(2D),unity3d,Unity3d,我试图建立一个敌人,移动两秒钟,然后朝相反的方向移动两秒钟,等等 但是,在编写代码时,我无法让角色向左行走,它有点卡住了 public class EnemyController : MonoBehaviour { public int speed = 2; void Start () { } void Update () { float auto = Time.deltaTime * speed; transform.Translate (auto, 0, 0);

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

但是,在编写代码时,我无法让角色向左行走,它有点卡住了

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

当您启动协同程序时,您是在一个新线程中启动它,这意味着您在每次运行更新时都要执行一个新的动画,大约每秒60次

这就是为什么它在一开始起作用的原因,但是一旦有120个动画实例告诉精灵在任何时候都要转身,你就会得到一些非常奇怪的行为

我想你想要的是把StartRoutine动画化;在“开始”方法中,更改“动画”中的代码,使其循环,直到单元处于死状态或其他状态

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

当然,删除StartRoutineAnimate;从更新

当我看到新答案时,我正在输入的正是。。。弹出窗口:好吧,这或多或少奏效了。现在,当调用speed*=-1时,“速度”值会发生变化,但角色会继续沿着视频中显示的相同方向行走,角色面朝右,然后在2秒钟后面朝左一段时间。你的意思是说这个角色现在总是面对面吗?这听起来很奇怪,请确保您没有编辑任何其他代码,尤其是:transform.rotation=Quaternion.LookRotation Vector3.forward;我想,您可以尝试使用硬值设置旋转,例如:transform.rotation=new Quaternion0,-100,0,0;回首往事,展望未来。但它的结果应该与您当前的代码相同…1*-1=-1和-1*-1=1这是一种切换值的数学方法。@Fredrik我的错,我的大脑显然很累。删除了我的评论。在这种情况下,视频非常有帮助!美好的