目前我有以下代码,它可以100%用于3D游戏,但我不能让它用于2D游戏。
它应该做什么,一旦物体到达航点,它应该朝着新的航点旋转。实际发生的是它围绕x
和y
轴而不是z轴旋转。我该怎么做才能让它只在z
轴上旋转?该物体应根据转弯速度向前移动。它不应该是瞬间转弯,除非转速是一个很高的数字。但无论如何,我再次问我如何让这段代码只在z
轴上旋转?
void Update () {
if(toWaypoint > -1){
Vector3 targetDir = wayPoints[toWaypoint].position - transform.position;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, turnSpeed * Time.deltaTime, 0.0f);
transform.rotation = Quaternion.LookRotation(newDir);
}
if(!usePhysics && toWaypoint != -1){
transform.Translate(Vector3.forward * Time.deltaTime * speed);
next();
}
}
答案 0 :(得分:0)
对于2D游戏,外观旋转不可靠,因为前进轴不同。一种解决方法是将精灵表示为空的GameObject,其中z轴(蓝色箭头)指向精灵将旋转的方向。
答案 1 :(得分:0)
看起来你正在使用Unity3D,这让我想知道如果你在2D编辑模式下制作游戏,你首先要弄乱Z轴。除非你将两个轴设置为以某种方式包含它,否则Z轴在该模式下几乎没有任何作用。我的建议是切换到2D编辑(如果还没有),然后使用Vector2
而不是Vector3
s。
另外,尝试使用其他轴之一作为旋转轴(transform.right
或.up
而不是.forward
)。
答案 2 :(得分:0)
我找到了我要找的东西:
void Update () {
if(toWaypoint > -1){
Vector3 vectorToTarget = wayPoints[toWaypoint].position - transform.position;
float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * turnSpeed);
}
if(!usePhysics && toWaypoint != -1){
transform.Translate(Vector3.right * Time.deltaTime * speed);
next();
}
}