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
.
我在游戏中使用以下两条线来减慢时间:
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
.