[英]Unity Engine: 2D Rigid body is falling slowly after adding movement?
我试图将简单的运动放入一个项目中,但由于某种原因,这导致它所应用的对象下落速度极慢。 我正在使用较新的输入系统,但我以前并没有真正使用过它,所以我不确定这是否是一个错误。
到目前为止,该运动正在按预期进行。 重力在设置中是默认的。
public class Movement : MonoBehaviour
{
public Rigidbody2D rb;
public float moveSpeed = 4f;
public InputAction playerControl;
Vector2 moveDirection = Vector2.zero;
private void OnEnable()
{
playerControl.Enable();
}
private void OnDisable()
{
playerControl.Disable();
}
// Update is called once per frame
void Update()
{
moveDirection = playerControl.ReadValue<Vector2>();
}
private void FixedUpdate()
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
}
}
到目前为止,这就是我应用于播放器对象的内容。 实际移动时没有问题,但坠落无法正常工作
在 FixedUpdate 中,您设置 RigidBody 的速度,包括 y 分量。 这与重力相互作用不佳。
重力降低 RigidBody2D 的垂直速度,使物体下落。 同时,您的代码每帧都会擦除这些更改,这意味着它无法向下加速,从而导致它以非常缓慢且恒定的速度下降(而不是像预期的那样加速向下)。
如果你可以完全控制你的垂直运动,重力将如何运作? 如果玩家无法控制他们的垂直运动,请将此行更改为:
rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.velocity.y);
这将解决问题,但会删除您的垂直控件。 这是你想要的吗?
如果你想保持垂直运动但不覆盖重力,你必须做出某种妥协。 如果您希望重力在您不控制角色的垂直运动时起作用,您可以这样做:
if (moveDirection.y > 0.001)
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
}
else
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.velocity.y);
}
您还可以将垂直运动添加到垂直速度。 这将意味着玩家无法像水平速度那样完全控制垂直速度,而是能够对其施加力。
rb.velocity = new Vector2(moveDirection.x * moveSpeed, rb.y + moveDirection.y * verticalMoveSpeed);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.