这是一个急速搭建的Demo,并不完善且还有问题,仅供参考。
若不是为了造轮子玩,请使用第三方插件。即时是造轮子玩,也请谨慎阅读,因为我无法保证该项目的质量水平。
没有摩擦力的情况下,软体会无法稳定下来而原地打转,而我之前所写的正式版本是没有这个问题的。 我怀疑是计算误差的问题,因为之前也出现过有摩擦力但打滑的问题,而其原因是浮点数的运算会丢失精度,虽然数学上看没问题,但在实际计算时还需对结果做归一化处理。
- 质点生成位置依赖模型顶点,对模型的适应性差。
解决方案:使用类似蒙皮骨骼的方案,让一个质点可用控制多个顶点
- 质点间空隙较大,导致遇上小于等于三角面大小的碰撞体时很容易穿模
解决方案:配合1,并将质点半径变大形状改为椭球型(这不就是插件obi Softbody的解决办法吗),不过依然没法完全解决这个问题。或者你也可用研究一下改为用三角面检测碰撞,但这怕是有点难,毕竟这样就变成了网格碰撞。你还可以配合射线检测之类的,做一些针对于特定场景的改动。
- 物理系统自己写的太麻烦还不好用
解决方案:可用尝试用UnityDOTS中的新物理系统配合编写,我之前用过,确实用帮我节省一些研究工作。
- 以当前的质点弹簧模型的结构很容易被压扁
解决方案:虽说瞎连确实也能跑起来,但若你研究过网上的布料算法就会知道有三种起不同功能的弹簧,其实放在3d中其实也一样,但我的意思并不是要去死板形式化的构造的弹簧模型,请将质点和弹簧视为一种物理工具,学会真正的使用它。
我的使用场景是各种细小物体与软体的交互,但质点弹簧模型对于我的应用场景而言,并不是太好用,即使是网络上的相关插件也都多少有些问题。
也许一开始我就不应该选择质点弹簧模型这一软体解决方案,研究物理计算的过程中,我越发感受到计算机的力量是有极限的。
对于一些物理需求过于苛刻的情况,选择用物理仿真模拟反而是正中要害,下次再有机会我肯定不选质点弹簧了。