正在旋转的物体被捕捉到一个非匀速移动的点



我有一个脚本,这样当我松开左右箭头键时,它会移回0,但它会迅速变为0。下面是我检查语句是否为真的代码:

if (!Input.GetKey(KeyCode.RightArrow) && !Input.GetKey(KeyCode.LeftArrow)) {
if (transform.eulerAngles.z < 0) {
rotation += speed * Time.deltaTime;     
}
else{
rotation = 0;
}
}

这是旋转GameObject的脚本:

rotation = Mathf.Clamp(rotation, -30, 30);
transform.localRotation = Quaternion.Euler(0, 0, rotation);

我想让它以Float: speed的速度移动,而不跟随旋转。

啊,我想我现在得到了你想要的。

您可以通过使用Mathf.MoveTowards来实现这一点,以便在没有按下按钮时将旋转值平滑地移动到0-无论它是正的还是负的:

var left = Input.GetKey(KeyCode.LeftArrow);
var right = Input.GetKey(KeyCode.RightArrow);
if (left && !right)
{
rotation -= speed * Time.deltaTime;
}
else if (right && !left)
{
rotation += speed * Time.deltaTime;
}
else
{
rotation = Mathf.MoveTowards(rotation, 0, speed * Time.deltaTime);
}
rotation = Mathf.Clamp(zRotation, -30, 30);
transform.localRotation = Quaternion.Euler(0, 0, rotation);

注意:现在如果你同时按下两个键,就好像你没有按任何键一样。如果你不想要这种行为,你可以删除排除条件(!left!right)

相关内容