Unity3d 球在unity 3d中意外地跳跃

Unity3d 球在unity 3d中意外地跳跃,unity3d,Unity3d,我正在和unity3D做一个游戏,球在地上滚动 当我设置单个大接地块,并在Unity3D中使用Rigidbody.AddForce()时。球滚得很好 但若我设置了多个小的障碍物,球会意外地在障碍物的边界上跳跃。即使块大小、位置和间隔完全匹配 我能解决这个问题吗 (我不能冻结球的位置Y,因为球需要重力。) -编辑- 下面是我通过AddForce()移动球的代码。当我点击时 private void MoveBall(Vector3 pos) { Ray HookRay = Camera

我正在和unity3D做一个游戏,球在地上滚动

当我设置单个大接地块,并在Unity3D中使用Rigidbody.AddForce()时。球滚得很好

但若我设置了多个小的障碍物,球会意外地在障碍物的边界上跳跃。即使块大小、位置和间隔完全匹配

我能解决这个问题吗

(我不能冻结球的位置Y,因为球需要重力。)

-编辑-

下面是我通过AddForce()移动球的代码。当我点击时

private void MoveBall(Vector3 pos) 
{
    Ray HookRay = Camera.main.ScreenPointToRay(pos);
    int layerMask = LayerMask.GetMask("Block");
    RaycastHit objectHit;
    float distance = Mathf.Infinity;
    if (Physics.Raycast(HookRay, out objectHit, distance, layerMask))
    {
        moveTo = objectHit.point;
        Vector3 forceValue = moveTo - transform.position;
        forceValue.y = 0f;
        rb.AddForce( forceValue * charSpeed, ForceMode.Impulse);
    }
}

这是Unity3D的截图 我放置了3x1x3立方体块,并将所有位置从Y排列到0。
它没有裂缝或缝隙。

这可能是由于物理引擎中的不准确造成的。它们之所以存在,是因为引擎试图抄近路以加快处理速度。您可以通过以下几个步骤使其减少计数器(以速度为代价)。首先要尝试的是使刚体连续进行碰撞检测。也可以尝试启用“插值”。还有更先进的方法,你可以比你的帧速率更频繁地进行物理更新。但我会先尝试更简单的选择。它们经常是足够的

进入编辑->项目设置->物理并使用默认联系人偏移量播放,可能会使其更小,如0.00001,然后尝试。另一种方法是冻结y,然后在出现某种情况时可以再次解冻。

您必须显示代码,是否其他块的碰撞器排列不正确?当球越过它们时,可能会有一些小的边缘导致球弹出到空中。有没有理由不能使用一个挡块?你可以尝试使用一个碰撞器对象来处理你所有的小方块?Thx buxter,但我希望方块随机下落,以便在球通过时形成一个洞。这就是为什么我在地上做了一个小方块。Thx亚当,我测试了所有插值、碰撞检测和固定时间步的选项,但它仍然在跳跃。嗯,你的球可能不够圆吗?