我使用以下代码旋转游戏角色以观看目标:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion是给定新目标时角色的当前旋转。
lookQuaternion是角色应查看的方向,其设置如下:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
TurningNormalizer只是Time.deltaTime
增加,并且turningSpeed
是编辑器中给定的静态值。
问题在于,尽管角色在大多数情况下都应该旋转,但在必须接近180度时仍存在问题。然后它有时会抖动并镜像旋转:
在此绘制效果不佳的图像中,角色(右侧)开始转向左侧的圆圈。不仅仅是左右旋转,它还可以启动“镜舞”:
- 它开始向新面貌旋转
- 然后突然突然以相同的角度但在另一侧并继续旋转
它执行此“镜像”的时间很长,直到它看着目标为止。这是带有四元数的东西吗?
编辑1: 显然问题不是由旋转本身引起的。更有可能的问题是,角色在旋转时会朝着面部移动。作为限制角度,当允许角色移动时,面对和目标之间的角度会减少,并且有时会消除抖动/镜像旋转。
这当然引发了更多的问题,为什么角色不能同时没有问题地同时移动和旋转呢?机芯使用的代码:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);