Unity3d Unity-AddForce()同时使用MovePosition()进行移动

Unity3d Unity-AddForce()同时使用MovePosition()进行移动,unity3d,topdown,Unity3d,Topdown,我在做自上而下的游戏,但我被卡住了。 我试图让玩家在敌人击中他时被击倒(他们的刚体碰撞) 现在的问题是,我正在使用MovePosition进行玩家移动,然后当我使用任何可以改变玩家RB速度的东西(设置velocity/AddForce())时,力/速度只应用了一瞬间。我想这是因为我使用了MovePosition,它忽略或重置了速度 有没有什么方法可以让我绕过这个问题,而不必让玩家以最大速度增加力量,或者计算击退会持续多长时间 简单地说,我希望击退平稳,因为现在我必须增加一个非常大的力,以获得非常

我在做自上而下的游戏,但我被卡住了。 我试图让玩家在敌人击中他时被击倒(他们的刚体碰撞)

现在的问题是,我正在使用MovePosition进行玩家移动,然后当我使用任何可以改变玩家RB速度的东西(设置velocity/AddForce())时,力/速度只应用了一瞬间。我想这是因为我使用了MovePosition,它忽略或重置了速度

有没有什么方法可以让我绕过这个问题,而不必让玩家以最大速度增加力量,或者计算击退会持续多长时间


简单地说,我希望击退平稳,因为现在我必须增加一个非常大的力,以获得非常快(基本上是瞬间)的运动

试着重写它,让物理引擎为你处理好一切。
您可以尝试使用
AddForce
移动对象,在“击退”状态下,您可以使用
AddForce
Force.pulse
作为参数。它应该按照预期的方式工作,并解决肩膀的移动问题。

为什么不使用速度来移动你的球员too@BugFinder结果是一样的。击退的速度会立即被玩家的移动速度覆盖。只有当你手动设置速度,而不是立即添加力量时,我才为玩家准备了这个(在玩家脚本中):
rb.MovePosition((Vector2)transform.position+velocity*Time.fixedDeltaTime)player.GetComponent().AddForce(velocity.normalized*knockback)玩家不会移动,如果你用MovePlayer设置它的位置,因为它会覆盖物理引擎的任何影响,所以你的速度听起来不错。只是,当我不想要任何加速度的时候,我真的不知道如何用附加力做运动。我不完全理解。你是说当你把手指从键盘上拿出来时,你想让播放器立即停止自己吗?我想让播放器在我按下一个键时立即达到最大速度,并像你说的那样立即停止。你可以尝试设置不同的ForceMode作为AddForce的参数,看看这是否是你想要的因此,如果您需要,可以尝试直接设置
刚体.velocity
。然后你会忽略所有的加速和减速