如何同时使用 AddForce 和 Velocity?

How to use AddForce and Velocity together?

我有使用 AddForce 进行跳跃的跳跃组件和使用 Velocity 左右移动的移动组件。

如果你在跳跃时不移动角色,跳跃会很好,但当你移动角色并同时跳跃时,移动组件将中断跳跃,因为速度正在设置 Vector2也定义 Y 轴的点。我尝试在运动中使用变换组件的当前 Y 轴,但即使那样也不起作用。

如何解决AddForce和Velocity之间的问题?

您的移动函数似乎正在创建一个新的速度矢量并覆盖现有的速度矢量。

Vector2 velocityVector = rigidbody.velocity;    

velocityVector.x += movement * force;

rigidbody.velocity = velocityVector;

这将保留现有的速度,包括 X 和 Y,并对其进行修改。您当然需要添加减速(通常我使用类似 if(grounded) velocityVector.x *= 0.999f; 的东西,但我确信存在更多花哨的数学以获得更实际的减速)和某种最大速度(同样,我保持简单并使用类似于 if(velocityVector.x > maxSpeed) velocityVector.x = maxSpeed;)。

Rigidbody.AddForce 具有以下定义:

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

ForceMode is ForceMode.VelocityChange可用的选项之一:

为刚体添加瞬时速度变化,忽略其质量。

通过一次函数调用立即应用速度变化。与 ForceMode.Impulse 相比,VelocityChange 将以相同的方式改变每个刚体的速度,而不管质量差异如何。此模式对于您想要在不考虑质量差异的情况下控制的不同大小 space 舰队之类的东西很有用。在此模式下,力参数的单位应用于刚体 distance/time.