我有一个角色,每两秒就改变一次(右或左)。在那两秒之后,速度乘以-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;
}
}
}
答案 0 :(得分:2)
那是因为transform.Translate
会将对象转换为本地空间,而不是世界空间。
执行以下操作时:
// The object will look at the opposite direction after this line
transform.rotation = Quaternion.LookRotation (Vector3.back);
speed *= -1;
你翻转你的对象和你要求向相反的方向前进。因此,对象将在之后的初始方向上转换。
要解决您的问题,我建议您不要更改speed
变量的值。
试着想象自己处于同样的境地:
最后,你以同一方向“继续”你的道路
以下是最终方法:
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;
}
}