UE4中ProceduralMesh组件应用(动态裁切Mesh 水果忍者)二

前言

我们要实现图一中的效果,将一个胶囊体切成两半

图一

图一中,左边是完整的胶囊体,右边是被切开后的胶囊体

如果想要实现上面的效果,我们需要使用ProceduralMesh组件,这个组件可以看这篇文章,有介绍(传送门

步骤

步骤阐述:首先我们需要使用ProceduralMesh组件中的函数Copy Procedural Mesh from static mesh component,从静态Mesh中获取模型信息,使用模型信息构建程序Mesh(ProceduralMesh)

1.构建Actor

构建Actor蓝图,为Actor添加ProceduralMesh组件和StaticMesh组件

2.选择静态Mesh,并调整信息

为StaticMesh组件添加Mesh资源。需要注意的是,为了保证复制后的Mesh具有碰撞信息,必须将StaticeMesh的碰撞资源生成方式,选择凸包碰撞生成。这很重要!参照图二图三

图二
图三

碰撞方式切记切换

3.调整StaticMesh资源为允许CPU操作获取

静态Mesh如果希望将数据复制到ProceduralMesh中,必须勾选Allow CPUAccess。此选项在静态Mesh资源编辑器的细节面板中可以找到。

图四

4.在Construction Script中复制静态Mesh信息

图五

此函数的目的,将静态网格(Mesh)的模型信息复制到ProceduralMesh组件中,最后勾选Create Collision目的是为ProceduralMesh生成碰撞信息(如果你没有通过凸包生成碰撞,那么勾选此选项也将不会获得碰撞信息)

注意:将StaticMesh组件细节面板中的Hidden In Game勾上,这样在启动引擎后静态Mesh将会隐藏,否则静态Mesh与ProceduralMesh会同时显示

5.测试碰撞生成是否成功

在ProceduralMesh组件的细节面板中找到如下信息,进行调整

图六

将Actor拖到场景中,运行程序,如果Actor可以模拟物理,说明以上操作成功

6.裁切Mesh

图七

SliceMesh是我自己编写的事件节点,方便在其他位置调用。

调用ProceduralMesh的函数Slice Procedural Mesh,即可完成裁切Mesh。

需要注意的是,裁切Mesh需要提供切面信息,一个位置,一个法线(点和法线可以确定一个面在空间中的信息)

默认我使用的是当前组件的位置,法线是平行X轴(世界)。

Create Other Half 是否将另一半创建为一个新的ProceduralMesh组件,我勾选上了,方便开启切开物理

Cap Option 切面是否进行覆盖

  • No Cap 不覆盖,切面将不会产生新的三角形
  • Create New 切面创建新的三角形覆盖(产生新的顶点),并使用Cap Material材质
  • Use Last 切面创建三角形(使用已有的模型顶点构建三角形),材质使用模型材质

7.测试裁切

在运行时态调用Actor的SliceMesh事件,如果可以切开,说明操作成功!

常见问题:

  • 是否使用凸包生成碰撞,将影响生成的Mesh是否可以开启模拟物理
  • 是否勾选Allow CPUAccess,将影响是否可以生成ProceduralMesh数据
  • 切面法线位置是否正确,将影响是否可以切开Mesh
  • Use Complex as Simple Collision 去掉勾选,将影响是否可以正常开启模拟物理

虚幻引擎版本 4.18.3

2 条评论

回复 Zery 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注