unity网格碰撞器接缝问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity网格碰撞器接缝问题相关的知识,希望对你有一定的参考价值。

Unity网格碰撞器接缝问题通常是由于模型在使用时的位置、旋转或缩放等因素引起的。如果没有正确设置网格碰撞器,就会导致未覆盖到的区域无法进行碰撞检测,从而出现接缝问题。

以下是一些可能有用的解决方法:

1. 调整模型的旋转和位置:尝试将模型旋转或移动一定角度或距离。这有助于检查是否存在运算精度误差或其他边框问题,并可能解决接缝问题。

2. 重新生成网格碰撞器:在Unity编辑器中,选择模型并进入“网格渲染器”选项卡。然后选择“生成网格碰撞器”按钮,以生成新的碰撞器。这有时可以修复接缝问题。

3. 尝试使用不同的网格碰撞器类型:在Unity中,有不同类型的网格碰撞器可供选择,如Mesh Collider、Box Collider、Sphere Collider等。尝试使用不同类型的碰撞器,看看是否可以解决接缝问题。

4. 检查网格碰撞器的缩放:如果你在编辑器中调整了网格碰撞器的缩放,可能会导致接缝问题。尝试将缩放值还原为默认值,再重新调整。

希望这些方法能够帮助你解决Unity网格碰撞器接缝问题。
参考技术A 主要指的是由于网格碰撞器之间存在接缝,而造成的物体之间的碰撞异常,从而影响游戏体验的问题。为了解决这个问题,一般可以采用以下几种方法:

1、 使用多边形碰撞器。多边形碰撞器可以有效的避免网格碰撞器之间的接缝,从而避免产生碰撞异常的情况。

2、 使用碰撞体的重叠处理。在碰撞体的重叠处理中,可以将碰撞体间的重叠部分放大,从而增加碰撞体之间的间隙,避免了碰撞异常的情况。

3、 针对特定场景,将碰撞体拆分成多个单独的物体,从而增加碰撞体之间的间隙,从而解决接缝问题。

4、 在代码开发中,可以对特定的碰撞体进行调整,从而避免碰撞体之间的接缝。

以上是解决的常用方法,在实际开发中,可以根据实际情况结合以上方法,解决。
参考技术B 在Unity中,网格碰撞器是由一系列三角形组成的,因此在两个三角形的接缝处会出现缝隙问题。这个问题通常会导致游戏中的物体出现穿透现象,影响游戏的真实性和可玩性。

解决方法有两种:

1. 使用更高的多边形数量,这样可以减少接缝问题的出现。但是这也会增加游戏的资源消耗和运行成本。

2. 在接缝处添加额外的三角形来填补缝隙。这个方法需要手动添加,但可以有效解决碰撞器接缝问题。
参考技术C Unity中的网格碰撞器接缝问题可以通过多种方式来解决。首先,可以通过改变模型的构建来避免网格的接缝。其次,可以通过在碰撞器之间添加一个很小的无效空间,使它们不会完全重叠,从而避免接缝。此外,可以使用顶点着色器或片元着色器来改变网格边界处的纹理,从而避免接缝处的明显颜色变化。最后,可以使用模型修复软件来消除接缝。 参考技术D Unity网格碰撞器接缝问题可以通过以下几种方法来解决:
1. 使用较小的网格碰撞器,以减少接缝的宽度;
2. 在两个碰撞器之间加入较小的碰撞器,以充分覆盖接缝;
3. 使用较大的碰撞器,但在接缝处添加一些阻挡物,以阻止物体穿过接缝;
4. 将接缝处的碰撞器设置为“trigger”,以防止物体穿过接缝;
5. 将接缝处的碰撞器设置为“no collision”,以防止物体穿过接缝;
6. 将接缝处的碰撞器设置为“ignore collision”,以防止物体穿过接缝。

详解Unity中的网格碰撞器Mesh Collider

前言

碰撞体组件定义了物体的物理性状,Unity中有一系列基本碰撞体,我们可以使用它们组合成任意形状,但除了基本碰撞体之外,Untiy还提供了诸如网格(Mesh)、车轮(Wheel)、地形(Terrain)等碰撞器,它们分别用于轮胎功能的实现、复杂网格的碰撞、地理环境的碰撞,今天就简要介绍一下网格碰撞器的简单使用。

目录

前排提醒:本文仅代表个人观点,以供交流学习,若有不同意见请评论留言,笔者一定好好学习,天天向上。
阅读此文章时,若有不理解的地方,推荐观看本文列出的参考资料来对照阅读。

阅读本篇前,请先了解“刚体和碰撞体”相关知识。

Unity版本[2019.4.10f1] 梦小天幼 & 禁止转载


一、网格(Mesh)碰撞器

一般情况下,使用基本碰撞体如正方体、圆柱体等的组合,足够模拟出百分之99的形状了,但是在游戏中,有些比较重要的角色或场景物体,需要特别精细的碰撞,这个时候使用网格碰撞体来构建物体的碰撞便是不二之选了。网格碰撞体的本质就是引用网格来计算碰撞。

这里说明一下网格(Mesh)和模型(Model)的区别:
网格:包含定义了3D对象形状的顶点信息,也就是模型的形状
模型:材质+动画+纹理+着色器+网格 = 模型
这里说的不够严谨,但我词穷了,烦请谅解。

下面我们实际操作一下,一个模型从创建到导入到Unity并添加网格碰撞器的整个过程

1.FBX模型导入到Unity中并作为网格碰撞器使用

这里我们选用Blender3.1来制作模型,首先打开Blender,然后经过…的操作,我们就创建好了这样的一个简单模型,并设置了一个简单的材质,然后导出为FBX格式,直接拖到Unity的Assets中

我们可以看到,导入后的FBX文件有了两个子文件,MM1和TestMode,它们分别是材质和网格,当它们俩组合到一起,就可以叫做模型。我们再把导入的模型资源拖到场景中。

我们可以看到,初次导入的模型资源只有基本的Transfrom、Mesh Filter、Mesh Renderer组件,还没有Collider,所以我们为它加上Mesh Collider

此刻就大功告成了,下面简要说一下剩余参数的作用。

2.Mesh Collider参数

1.Convex

这里官方的解释是选中后将使Mesh Collider与其他的Mesh Collider发生碰撞,说实话我没看明白啥意思。

下面我用两张图解释一下,第一张未勾选Convex,第二张勾选Convex

相信这里大家应该能看出差别了,未勾选则表示这个模型按照网格计算碰撞,勾选了则表示Unity会自动将网格凹凸不平的部分填平。
勾选肯定节省资源的,且勾选之后Is Trigger选项也能使用了,但是你勾选这个倒不如用圆柱体碰撞器来模拟碰撞了,个人看情况使用吧。

2.Cooking Options

物理引擎以何种方式处理这个网格(给出了六个选项)

  • None 禁用所有选项
  • Everything 启用所有选项
  • Cook for Faster Simulation 更快的模拟
  • Enable Mesh Cleaning 启用网格清理
  • Weld Colocated Vertices 合并具有相同位置的顶点
  • Use Fast Midphase 使用更快速的算法

默认是多选了后四项,说实话,我并不是很懂这些(好吧是一窍不通),不多说了,免得误人子弟。

3.Physic Material

这个选项用于模拟物体表面的物理材质,对于地面而言,比如冰面、木板、水泥板这些。对于物体本身而言,比如物理自身的弹性,物理自身的平滑度之类的,都会直接影响到物理模拟的效果。
物理材质相关的可以看我“详解刚体与碰撞器”文章中的2.3节,我已经写的很明白了,这里不多赘述。

4.Mesh

引用需要用于碰撞的网格,不多解释了,1.1说的很清楚了


二、总结和参考资料

1.总结

  • 本来我想着用一篇把网格、车轮和地形都说完,但是接触车轮之后才发现东西太多太多了,所以决定分成三篇来讲,所以这篇就稍微短了一点点。
  • 需要注意的点:
    • 网格:包含定义了3D对象形状的顶点信息
    • 模型:材质+动画+纹理+着色器+网格 = 模型
    • Mesh Collider的Convex参数
      • 用于设置是否填补中空
  • FBX导入Unity中,会有一个材质和网格,他俩组合起来,就叫模型(后续也开新坑讲讲各种格式导入Unity的操作)

2.参考资料

[1].Unity官方.Unity网格碰撞体
[2].枕流爱玩游戏&lzh0913hangUnity3d 中MeshCollider组件下convex勾选有什么用?(百度知道)

以上是关于unity网格碰撞器接缝问题的主要内容,如果未能解决你的问题,请参考以下文章

Unity之CharacterController 碰撞问题总结

详解Unity中的车轮碰撞器Wheel Collider

Unity3D-Collider(碰撞器)和触发器(Trigger)

Unity 自定义编辑器,例如“层碰撞矩阵”

unity3d怎么做碰撞?unity3d如何添加碰撞体?求解!

Unity中基于网格/平铺移动+碰撞?