简介
网格碰撞器(Mesh Collider)组件(Component)会获取一个网格资产并构建一个与该网格的几何形状相匹配的碰撞盒。网格碰撞器极其精确的碰撞模拟使得碰撞检测比其他碰撞器(胶囊碰撞器、球形碰撞器、盒子碰撞器)更准确,但是相对的,会更损耗性能。
组件应用
网格碰撞器(Mesh Collider)适合用于以下方面:
- 不需要大量处理计算的 游戏对象(Game Object)。一般情况下,您可以对静态场景使用网格碰撞器,对于可以移动的游戏对象使用复合碰撞器。
【Mesh_Collider001.png】
- 如果使用复合碰撞器反而会更损耗性能,此时适用网格碰撞器(如几何棱锥)。
【Mesh_Collider002.png】
创建方法
创建 网格碰撞器(Mesh Collider)组件(Component)前,需要在 场景编辑器(Scene Editor)的 层级窗口(Hierarchy)或者 场景预览窗口(Scene)中,选中需要添加碰撞器的 游戏对象(Game Object)。
方法一:
选中对应的游戏对象后,在 检视窗口(Inspector)窗口中用鼠标左键点击 添加组件(Add Component)> 物理(Physics) > 网格碰撞器(Mesh Collider) 进行创建。
【Mesh_Collider002.png】
方法二:
选中对应的 游戏对象 后,在 菜单栏(Menu Bar)中点击 组件(Component)> 物理(Physics) > 网格碰撞器(Mesh Collider) 进行创建。
【Mesh_Collider003.png】
属性
网格碰撞器(Mesh Collider)组件(Component)包含以下属性:
【Mesh_Collider004.png】
| 名称 | 描述 |
| 凸面(Convex) | 是否使用网格的凸包近似代替碰撞器的碰撞盒,关于凸面与凹面的更多内容,请参阅 凹面与凸面网格碰撞器 小节。 勾选,碰撞盒顶点数会近似于网格顶点,但是总顶点数会小于 255 个,并在其挂载的 游戏对象(Game Object)被物理系统影响时碰撞会生效。 未勾选,碰撞盒顶点会根据网格顶点配置,此时如果其挂载的 游戏对象(Game Object)被物理系统影响时碰撞会失效。 |
| 是否触发(Is Trigger) | 需要 凸面(Convex)属性勾选(True)此属性值才能被编辑。用于设置碰撞器是否为触发碰撞器。触发碰撞器与其他碰撞器接触时没有物理效果,且发生触发事件,详情请参阅 碰撞器 章节关于碰撞器相互作用的内容。 勾选,此碰撞器为触发碰撞器。 |
| 材质(Material) | 碰撞器所引用的物理材质资产,用于配置该碰撞体的摩擦力和弹力。关于物理材质的创建方法和使用方法,请参阅 物理材质资产 章节。 |
| 网格(Mesh) | 引用网格碰撞器所使用的网格资产,用于初始化网格碰撞器的碰撞盒。 |
凹面与凸面网格碰撞器
网格碰撞器分为凹面和凸面两种,其区分的条件与物理学上凹面和凸面的区分条件是一样的。
凹面与凸面的定义
凸面(Convex)指的是该碰撞器的碰撞盒仅具有向外弯曲的线条。碰撞盒上任意一个顶点的切面,都会处于碰撞盒的外部。
【Mesh_Collider005.png】
图中的西瓜切片和西瓜模型的网格碰撞器对应的碰撞盒就均为凸面。
凹面(Concave)指的是该碰撞器的碰撞盒至少具有一个洞穴或凹痕,其边界向内弯曲。碰撞盒上任意一个顶点的切面,有可能会穿过碰撞盒的内部。
【Mesh_Collider006.png】
图中的牛角包和甜甜圈模型的网格碰撞器对应的碰撞盒就存在有凹面。
当前限制
在 SandMod 中无论网格碰撞器实际上是凹面还是凸面,默认都会认为是凹面的,仅会在网格碰撞器组件的 凸面(Convex)属性值设置为 勾选(True)状态,SandMod 会对该网格碰撞器的碰撞盒进行自动减面以及将碰撞盒改为全为凸面的碰撞盒,这样 SandMod 才会将该碰撞器判断为凸面的网格碰撞器。
凹面的网格碰撞器不能属于 动态碰撞器(Dynamic Collider)或 运动学碰撞器(Kinematic Collider)类型,仅能为 静态碰撞器(Static Collider)类型,否则该碰撞器不会发生碰撞。
非静态网格碰撞器
如果您期望一个网格碰撞器属于 动态碰撞器(Dynamic Collider)或 运动学碰撞器(Kinematic Collider)类型,您需要将该网格碰撞器设置为凸面网格碰撞器,或者采用复合碰撞器模拟该 游戏对象(Game Object)的碰撞盒。
方法一:
如果您不需要在网格凹入的部分精准检测碰撞,可以将网格碰撞器组件的 凸面(Convex)属性值设置为 勾选(True)状态,SandMod 会对该网格碰撞器的碰撞盒进行自动减面以及将碰撞盒改为全为凸面的碰撞盒。
| -------------- 如示例中为牛角包和甜甜圈添加网格碰撞体,默认情况下为凹面网格碰撞体,撞盒顶点会根据网格顶点配置。(图中为了方便您的理解,碰撞体的碰撞盒是后期描绘, SandMod 暂不支持显示网格碰撞体的碰撞盒) 【Mesh_Collider007.png】 当将该两个碰撞体的凸面(Convex)属性值设置为 勾选(True)状态,两个网格碰撞体的碰撞盒变更为顶点数更少、且包裹了该网格的凸面网格碰撞盒。 【Mesh_Collider008.png】 -------------- |
方法二:
如果您需要在网格凹入的部分也能精准检测碰撞,您可以使用由多个凸面碰撞器,或者胶囊碰撞器、球形碰撞器组成的复合碰撞器。
| -------------- 如示例中以复合碰撞器为牛角包和甜甜圈添加碰撞体。 【Mesh_Collider009.png】 -------------- |

勾选,碰撞盒顶点数会近似于网格顶点,但是总顶点数会小于 255 个,并在其挂载的 游戏对象(Game Object)被物理系统影响时碰撞会生效。
未勾选,碰撞盒顶点会根据网格顶点配置,此时如果其挂载的 游戏对象(Game Object)被物理系统影响时碰撞会失效。
勾选,此碰撞器为触发碰撞器。