C# 在unity3d中使用touchphase时rigidbody.moveposition不工作

C# 在unity3d中使用touchphase时rigidbody.moveposition不工作,c#,unity3d,3d,rigid-bodies,C#,Unity3d,3d,Rigid Bodies,我正在为手机制作一个3d游戏,所以我添加了一个脚本,通过用一个手指拖动来移动玩家。所以我尝试用不同的方法让他与其他对象碰撞,但我没能让他碰撞。那么如何让他与物体碰撞呢 void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Moved) { ta

我正在为手机制作一个3d游戏,所以我添加了一个脚本,通过用一个手指拖动来移动玩家。所以我尝试用不同的方法让他与其他对象碰撞,但我没能让他碰撞。那么如何让他与物体碰撞呢

void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);

        if (touch.phase == TouchPhase.Moved)
        {
            targetPosition += Vector3.right * touch.deltaPosition.x * speedmodifier;
            targetPosition += Vector3.forward * touch.deltaPosition.y * speedmodifier;
        }
    }
}
private void FixedUpdate()
{
    rb.MovePosition(targetPosition);
}

不能使用Rigidbody.MovePosition。刚体.MovePosition类似于Transform.Translate。它覆盖任何碰撞。您可以使用的另一种方法是添加一些力(Rigidbody.AddForce),然后对最大速度进行限制。这对我很管用。出于好奇,当你禁用touchphase时,它会发生碰撞吗?我不相信,但仍然。。。无论如何,您的问题的答案是不要使用Rigidbody.MovePosition,因为它会覆盖任何碰撞检测。

如何做到这一点,因为我使用了两种不同的方法使用rb.addforce,但我的播放器停止了移动。请使用一个称为“最大速度”的变量。然后利用变换计算动量。之后,使用一个函数停止addforce。