首页 > 解决方案 > 如何在检查碰撞的同时将 RigidBody2D 移动到某个位置

问题描述

我目前正在 Unity 中创建一个游戏,您可以在其中使用OnMouseDrag()、 aCircleCollider2D和 a移动球RigidBody2D。这就是我设置球的位置的方式:

 private void OnMouseDrag()
 {
     Vector2 mouseInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
     playerRb.position = new Vector3(mouseInWorld.x, mouseInWorld.y, 0);
 }

当鼠标四处移动时,我仍然希望球在碰撞时滑动。有没有办法做到这一点?

我试过RigidBody2D.MovePosition()了,但是球从一个点跳到另一个点,Raycast但也无法让它发挥作用。

编辑:这就是我现在得到的:

playerRb.velocity = new Vector3(mouseInWorld.x - playerRb.position.x, mouseInWorld.y - playerRb.position.y, 0);

现在的问题是,球落后于 mousePosition。

标签: c#unity3dcollision-detectiongame-physics

解决方案


当您使用 RigidBody.MovePosition 时,您不会调用物理引擎,因此它会忽略碰撞。如果你想发生碰撞,你需要使用 RigidBody.Velocity 来代替。

进行此更改将需要您对代码进行一些更改,因为您提供给 RigidBody.Velocity 的是速度而不是位置,因此您需要计算 x,y 所需的速度(如果您在 3d 中,则需要计算 z ) 到达目的地。

我邀请您阅读有关速度的 Unity 页面以获取更多信息 https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html


推荐阅读