Unity - 调整Time.fixedDeltaTime以获得平滑的慢动作混乱Addforce

时间:2017-09-01 15:48:35

标签: c# unity3d game-physics

我使用两条线减慢游戏时间:

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

慢动作效果很好,就像它必须一样平滑。

问题是虽然我在关卡上有很多AddForce实用程序,比如跳跃,蹦床,风等,但它们的计算方法是让玩家需要非常精确的计时才能做到这一点。

我注意到,在慢速运动而不是常规速度使用它之后,无论我尝试多少次,这些蹦床都不会让我足够跳跃(这之前很容易跳转)。

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

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

修改

蹦床:

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());
    }
}

它使用&#34;双跳&#34;如果我们跳上蹦床,如果我们不这样做,那就是经常跳。

再次修改:我添加了Addforce版本,我应该在开头添加。我使用了一个弃用的,很抱歉给您带来不便。

顺便说一下,当我使用OnTriggerStay2D时,我的猜测是力量本身并不相同 - 但是玩家获得该力量时的持续时间是。我不知道在所有情况下,根据时间按比例改变力量是否有效。

1 个答案:

答案 0 :(得分:0)

当您修改Time.timeScale时,您 必须修改Time.fixedDeltaTime 。你的游戏出现&#34;滞后&#34;是因为你的刚体不是插值的。将Rigidbody.interpolation设为RigidbodyInterpolation.Interpolate