Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何防止嘲笑者穿墙?_Unity3d_Unity3d 5 - Fatal编程技术网

Unity3d 如何防止嘲笑者穿墙?

Unity3d 如何防止嘲笑者穿墙?,unity3d,unity3d-5,Unity3d,Unity3d 5,我有一艘船,它是一个刚体。船上有一个meshclider。此碰撞器设置为凸面 我得到了一个编程创建的网格。该网格上有一个MeshCollider。此碰撞器未设置为凸面 大多数情况下,这是可行的。我不会从地板上摔下来。大约40%的时间我可以开车穿过墙壁 为了解决这个问题,我为每个墙段添加了一个子GameObject标记为static。这个GameObject上有一个BoxCollider。我将对撞机的尺寸调整为比墙的截面大0.1。这意味着碰撞器重叠,并且不应该有间隙 正如你在下图中所看到的,我有时

我有一艘船,它是一个
刚体
。船上有一个
meshclider
。此碰撞器设置为凸面

我得到了一个编程创建的
网格
。该网格上有一个
MeshCollider
。此碰撞器未设置为凸面

大多数情况下,这是可行的。我不会从地板上摔下来。大约40%的时间我可以开车穿过墙壁

为了解决这个问题,我为每个墙段添加了一个子
GameObject
标记为static。这个
GameObject
上有一个
BoxCollider
。我将对撞机的尺寸调整为比墙的截面大0.1。这意味着碰撞器重叠,并且不应该有间隙

正如你在下图中所看到的,我有时仍然能够开车穿过墙壁

我该怎么做才能不让车穿过墙

我试过:

  • 刚体
    也添加到地面,标记为运动学。为此,我将
    meshcliller
    一起移除,并使用了all
    BoxCollider
    s。我必须使用所有的BoxCollider,因为你可以有一个凸刚体。这并没有解决问题

  • 我从播放器中移除了
    MeshCollider
    ,并使用了一个
    BoxCollider
    。此时,场景中不再有任何
    MeshCollider
    s。这并没有解决问题

  • 两个
    刚体
    都设置为连续碰撞检测


我开始怀疑UNity3d物理系统是否有效://

太多的事情可能是问题,请逐个尝试,看看哪一个适合你

  • 如果要将网格碰撞器用于凸面,则必须将刚体附加到它。将刚体附加到两个对象上

  • 由于使用代码生成墙,请确保指定网格碰撞器的墙具有255,凸面将失败

  • 由于它有时工作,但有时失败,因此将墙壁和船舶的刚体碰撞检测更改为连续动态

  • 使用复合碰撞器。移除船上的网格碰撞器,并在船周围使用多个长方体碰撞器,以获得所需的感觉


  • 调整固定和允许的最大时间步长。我将“固定时间戳”设置为
    0.0005


    你如何移动这艘船?你是直接移动船的位置,还是使用像AddForce这样的刚体方法?顺便说一句,别担心,Unity的3D物理引擎“Nvidia PhysX”实际上非常健壮。不幸的是,由于用户错误,有很多地方可能会出错(这在我们所有人身上都会发生)。@AquaGeneral-我正在使用
    刚体.MovePosition
    刚体.MoveRotation
    来进行船的移动。