3 回答

TA贡献1824条经验 获得超8个赞
如果您想要基于物理的跳跃,请不要使用 MovePosition。MovePosition 只会根据您的插值设置将刚体移动到某个位置。由于您的插值没有,您会得到“非常滞后的运动”。
相反,您应该使用冲力。在您只尝试加速力之前。此外,您的水平运动也必须相应地改变以增加力量。像这样尝试:
void Jump()
{
rb.AddForce(Vector2.up*jumpVelocity, ForceMode2D.Impulse);
}
要对此进行测试,您应该暂时禁用水平移动。或者你可以这样做:
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
rb.AddForce(horizontal * Vector2.right);
}
还有几件事:
-从不检查 FixedUpdate 循环内的输入!您的游戏可能以 100 fps 运行,并且取决于固定更新(之所以称为 fix,是因为 unity 试图保持物理更新帧率固定),您可能会错过按下按钮的机会。
- 如果您使用 MovePosition,请仅在 FixedUpdate 中使用它。
-你可能想改变你检查跳跃输入的方式,你也可能想检查玩家是否接地。
-您还应注意,还应避免在更新中使用 AddForce 作为加速力。

TA贡献1884条经验 获得超4个赞
首先,您需要调用Rigidbodyfrom的方法,FixedUpdate因为那是计算物理的地方。其次将您的向量值乘以Time.fixedDeltaTime.
例子:
void FixedUpdate()
{
rb.MovePosition(rb.position + position * Time.fixedDeltaTime);
}

TA贡献2012条经验 获得超12个赞
我有这个问题。就好像这个角色在传送而不是慢慢上升。
我通过更改代码解决了它。
我使用了这段代码: MainBodyRigidBody.velocity = new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;
但我应该使用MainBodyRigidBody.velocity +=
我将我的代码更改为:
MainBodyRigidBody.velocity += new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;
我为我的角色运动使用了上面的代码,但它导致了我的问题。
- 3 回答
- 0 关注
- 113 浏览
添加回答
举报