性格没有改变方向

时间:2017-01-04 15:29:47

标签: unity3d

我有一个角色,每两秒就改变一次(右或左)。在那两秒之后,速度乘以-1,所以它改变方向,但它只是向右移动( - >)

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyController : MonoBehaviour {

public int speed = 2;

void Start () 
{

    StartCoroutine(Animate ());
}

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

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

1 个答案:

答案 0 :(得分:2)

那是因为transform.Translate会将对象转换为本地空间,而不是世界空间。

执行以下操作时:

// The object will look at the opposite direction after this line
transform.rotation = Quaternion.LookRotation (Vector3.back);
speed *= -1;

你翻转你的对象你要求向相反的方向前进。因此,对象将在之后的初始方向上转换。

要解决您的问题,我建议您不要更改speed变量的值。

试着想象自己处于同样的境地:

  1. 向前走
  2. 旋转180°然后向后走
  3. 最后,你以同一方向“继续”你的道路

    以下是最终方法:

    IEnumerator Animate()
    {
        WaitForSeconds delay = new WaitForSeconds(2) ;
        Quaterion backRotation = Quaternion.LookRotation (Vector3.back) ;
        Quaterion forwardRotation = Quaternion.LookRotation (Vector3.forward) ;
        while (true)
        {
            yield return delay;
            transform.rotation = backRotation;
            yield return delay;
            transform.rotation = forwardRotation;
        }
    }