向前移动时在Z轴上旋转游戏对象
本文关键字:旋转 游戏 对象 移动 | 更新日期: 2023-09-27 18:22:37
目前我有以下代码,它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();
}
}
Look旋转对于2D游戏来说是不可靠的,因为前向轴不同。一种解决方法是将精灵设置为空GameObject的父对象,z轴(蓝色箭头)指向精灵旋转的方向。
看起来你在使用Unity3D,这让我想知道,如果你在2D编辑模式下制作游戏,为什么你一开始就要摆弄Z轴。Z轴在该模式下实际上什么都不做,除非您将两个轴设置为以某种方式包含它。我给你的建议是,如果你还没有切换到2D编辑,那么使用Vector2
s而不是Vector3
s。
另外,尝试使用其他轴之一作为旋转轴(transform.right
或.up
,而不是.forward
)。
我找到了我要找的东西:
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();
}
}