开发中往往遇见需要实现柔体的效果,例如篮球落地会经过弹力变形,走入沙坑会陷下去,但是这些基本上都不可能会在游戏中进行实现,因为性能是一大难点。但是在VR开发中,我认为这些点终究会是需要使用到的,所以自己研究了研究。
基于PsoftBody插件进行实现。
PsoftBody目前在网上没看见使用的案例,但是自己目前处于学习状态,所以自己研究了下。
PsoftBody插件的核心是基于碰撞进而改变对象的Mesh网格来实现所谓的“变形”,添加了PsoftBody组件的游戏对象,PsoftBody会为这个对象添加Mesh Collider。 我们都知道使用MeshCollider进行碰撞检测是十分的消耗性能的,但是VR开发来说,这点开销应该没多大问题。
使用PsoftBody实现沙发的“弹性变形”效果。
在最开始时,我想要通过模拟小球落地的效果来实现变形效果,为一个Sphere添加刚体,并添加PsoftBody组件,结果收到了报错。
Paste_Image.png Paste_Image.pngPsoftBody在unity5中是不支持对超过256个多边形并带有刚体组件的游戏对象进行变形的。所以我们就需要将带有刚体组件的对象来“驱动”我们想要进行“变形的物体”去变形。(这里用沙发去进行演示)
- 搭建一个场景,如下:
- 为Sphere添加刚体组件,并为我们沙发需要实现变形的地方添加PsoftBody脚本。(这里为了更好的演示效果,我将力的乘数增大(这个乘数越大对这个变形效果影响越大))
- 我们运行游戏,可以观察到小球给沙发造成的变形效果。
- 我们观察沙发的Mesh,发生了变化。(PsoftBody插件实现变形的原理)
- 那现在问题就来了,我们不可能就这样改变了Mesh实现变形了以后就不在对它进行了管理。这样对于柔体变形还不如不去实现,我们应该做到的是当小球离开的时候,我们将它的Mesh回到原来的样子,很棒的是PsoftBody帮我们实现了这个方法。
- 在PsoftBody脚本里,通过PsoftCalculate()方法实现的变形,如果你想得到更符合你的变形,你可以直接更改里面的参数设定。
- 使用OnCollisionExit方法,实现碰撞离开的时候恢复原状。
- 如果我们想得到让人性化的体验,让沙发变形(下凹)的地方,缓慢的变回来,我们就需要使用到插值,很棒的又是PsoftBody也为我们提供了这个方法。
PsoftBody的参数解析。
Paste_Image.png在插件中的已经写得很详细了。
Paste_Image.png- SoftBody Settings:
- Min Soft Velocity:触发变形计算所需的最小速度。
- Impact Scale:碰撞造成的缩放影响,越大的刻度意味着更大的凹坑。
- Force Multiplier: 碰撞力的乘数,结果越大凹痕越深。
需要插件的朋友可以私密我。
网友评论