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
加油
加油~~