网上的unity破碎插件很多,不过想着可以以自己的方式实现也不失为一种乐趣,虽然整体的表现性上显得有些差,但也并不会影响最终的效果,接下来我大致讲解一下破碎一个物体的流程,因为用到了协程计算碎片的原因,所以会在所有碎片计算完成以后才会触发碎片的物理效果,所以有些模型可能会显得卡顿一下。
第一步:
添加MeshBroken脚本,目前破碎参数还较少,可以进行一些适当的调节以达到不同的破碎效果,不过建议面数过多的物体慎用,因为这里破碎的碎块数量必须大于等于原网格的面数(至于为什么呢,那是因为我目前还没想到可以数目随机、位置随机的组合多个三角面的方式,如果有相关思路的欢迎一起讨论)。
IsBrokenOnHit:物体受到碰撞时自动破碎,无论是实际碰撞还是触发器碰撞;
FragmentNum:碎片数量;
SurfaceFragmentThickness:面片破碎时单个面片厚度;
GridFragmentMinThickness:块状破碎时单个碎块厚度变化最小值;
GridFragmentMaxThickness:块状破碎时单个碎块厚度变化最大值;
FragmentStyle:碎片类型,可选择surface(面片破碎),grid(块状破碎);
BrokenStyle:破碎方式,可选择statice(静态破碎),explode(爆炸破碎);
ExplosiveForce:爆炸破碎时的爆炸力;
ExplosionRange:爆炸破碎时的爆炸力作用范围;
第二步:
效果演示。
第三步:
实现的大致流程。
首先,开始破碎时,我们先要计算所有的碎片组成(所以比较耗性能,破碎过程是即时计算的),因为目前的破碎方式是按模型原本面数进行计算的,如果模型的面数小于碎片需求,则需要按一定的规则破开部分面
破开一个面的方式
所有的碎片组成方式都计算完毕之后,便保存所有碎片集合,遍历集合以生成所有碎片
之后在其他脚本里,想要动态的控制物体的破碎的话,可以在外部调用破碎开关函数
最后附上动态演示图:
-----by MeshEditor