Unity - 调整 Time.fixedDeltaTime 以实现平滑 慢动作搞乱了 Addforce

Unity - Adjusting Time.fixedDeltaTime for smooth Slow mo messes up Addforce

我在游戏中使用以下两条线来减慢时间:

Time.timeScale = slowMotionSpeed;
Time.fixedDeltaTime = slowMotionSpeed * 0.02f;

而且慢动作效果很好,它应该很流畅。

问题是我在关卡上有很多 AddForce 实用程序,例如跳跃、蹦床、风等,并且它们经过计算,因此玩家需要非常精确的时间才能正确执行。

我注意到,在以慢动作而不是正常速度使用它之后,无论我尝试多少次,这些蹦床都无法让我跳得足够远(之前跳起来很容易)。

如果我尝试慢动作跳跃,但没有调整Time.fixedDeltaTime,游戏会延迟,但跳跃成功。

问题是,如何解决这个问题,即使 Time.fixedDeltaTime 被修改,AddForce 也能正常工作并将玩家扔到相同的距离?

编辑:

蹦床:

float jumpForceAdded;
void OnTriggerStay2D(Collider2D other)
{
    if (other.gameObject.CompareTag("Player") && !CharacterController2D.movementDisabled && !CharacterController2D.playerDied)
    {
        Rigidbody2D otherRB = other.gameObject.GetComponent<Rigidbody2D>();
        if (JumpInput.JUMP)
        {
            otherRB.AddForce(new Vector2(0,jumpForceAdded * 2f));
        }
        else
        {
            otherRB.AddForce(new Vector2(0,jumpForceAdded));
        }
        StartCoroutine(ChangeSpritesBack());
    }
}

如果我们在蹦床上跳,它使用 "double jump",如果我们不跳,则使用常规跳跃。

再次编辑:我添加了Addforce版本,我应该在开头添加。我使用了一个已弃用的,对于给您带来的不便,我们深表歉意。

顺便说一句,当我使用 OnTriggerStay2D 时,我的猜测是力本身并没有不同 - 但玩家接收力的持续时间不同。我不知道根据时间按比例改变力是否适用于所有情况。

当您修改 Time.timeScale 时,您 而不是 必须修改 Time.fixedDeltaTime。你的游戏出现 "lag" 的原因是你的刚体没有被插值。设置 Rigidbody.interpolation to RigidbodyInterpolation.Interpolate.