效果

步骤
1. 新建一个Actor蓝图,这里命名为“BP_程序化网格体”

打开“BP_程序化网格体”,添加一个静态网格体组件,再添加一个程序化网格体组件

选中程序化网格体组件,取消勾选“将复杂性用作简单碰撞”选项

选中静态网格体组件,给其赋予一个模型

在构造函数中,将静态网格体的“New Mesh”引脚提升为变量,变量命名为“CustomMesh”

变量“CustomMesh”,勾选可编辑实例,和生成时公开

在构造函数中继续设置

在事件图表中,创建一个自定义事件,这里命名为“网格体切片”,首先添加一个“将程序化网格体切片”节点,这个节点就是将网格体切割的核心。该节点的引脚“Plane Position”和“Plane Normal”分别表示切面上任意一点的位置和切面法线。引脚“Create Other Half”表示网格体切下来之后是否还需要保留被切下来的一半。引脚“Cap Material”表示切面的材质。输出引脚“Out Other Half Proc Mesh”表示被切下的另一半(类型也是程序化网格体组件的对象引用)

在自定义事件“网格体切片”中添加两个输入的参数,这两个参数分别表示切线位置和法线,连接到“Plane Position”和“Plane Normal”引脚,勾选Create Other Half”,“Cap Option”引脚选择“新建上限的分段”,“Cap Material”引脚选择随便选择一个材质。

上面的逻辑此时已经能够实现将静态网格体切分的功能,但是被切后的网格体如果没有外力影响,是看不出这个网格体已经被切开了。
为了让被切后的网格体能够顺利的分开来,我们首选需要选中“程序化网格体”组件,勾选“模拟物理”选项。

让被切下来的另一半也开启碰撞和模拟物理

对分割后的两个物体分别施加法线方向的力

此时我们切割的逻辑已经完成,接下来我们希望通过鼠标触发切割事件,然后通过鼠标点击将网格体切割为两个部分。
2. 我们希望只有指定的物体可以被切割。打开项目设置,点击“新建检测通道”按钮

命名为“可切割物”,默认响应设置为“Ignore”,然后点击接受

3. 回到“BP_程序化网格体”中,这里设置程序化网格体组件的碰撞预设为自定义,碰撞响应中可切割物为阻挡

4. 打开关卡蓝图,首先显示鼠标光标

当点击鼠标后发出一条射线检测

判断射线检测到的物体的类型是否是“BP_程序化网格体”

如果是的话就调用自定义事件“网格体切片”

5. 将“BP_程序化网格体”拖入场景中,设置公开参数“Custom Mesh”为一个网格体模型

此时运行效果如下,发现有一部分无法切割

6. 回到“BP_程序化网格体”,添加如下节点

自定义事件添加一个输入,命名为“被检测组件”,变量类型为“基元组件”

然后将输入的“被检测组件”类型转换为程序化网格体组件,再设置给蓝图的程序化网格体组件

此时运行游戏发现切下来的所有部分都可以进行切割了:

参考视频:
https://www.bilibili.com/video/BV1KM411473p/?spm_id_from=333.999.0.0&vd_source=36a3e35639c44bb339f59760641390a8















![[C++]六大默认成员函数详解](https://img-blog.csdnimg.cn/1dfead49456941ae8b227f1e09ca0aea.png)



