我有使用AddForce跳跃的跳跃组件和使用Velocity左右移动的移动组件。
如果你在跳跃时没有移动角色跳跃会很好但是当你移动角色并同时跳跃时,移动组件会打破跳跃,因为速度正在设置Vector2点也定义Y轴。我尝试使用运动中变换组件的当前Y轴,但即使这样也不起作用。
我应该怎样做才能解决AddForce之间的问题然后使用Velocity?
答案 0 :(得分:1)
似乎你的移动功能正在创建一个新的速度向量并覆盖现有的速度向量。
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;
)。
答案 1 :(得分:1)
Rigidbody.AddForce
具有以下定义:
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
ForceMode
可用的选项之一是ForceMode.VelocityChange
:
向刚体添加瞬时速度变化,忽略其质量。
通过单个函数调用立即应用速度变化。与ForceMode.Impulse不同,VelocityChange将以相同的方式改变每个刚体的速度,而不管质量的差异。这种模式对于像你想要控制的不同大小的太空船队这样的东西很有用,而不考虑质量的差异。在此模式下,力参数的单位作为距离/时间应用于刚体。