浮力
浮力

浮力

img_v3_02h1_06684202-b372-4178-bfaa-e14dcca65f1g.jpg

img_v3_02h1_02ca4361-8e39-4d22-bff0-969c40a5f40g.jpg

为Box绑定4个浮力运算球,每个球的参数分别是局部空间位置 (vector3)+ 球形半径(float)

image.png

得到一个vector4的数组。遍历这个数组也就是每个小球,计算每个小球的体积,根据各个小球在水中的体积,就能得到这个小球像上作用的浮力。通过UE的Add Impulse at Location将浮力在小球位置处应用到受浮力物体上。

image.png

img_v3_02h1_60fc2cb1-f995-4590-ac9a-d0d7930f5a3g.jpg

计算得到小球的侵没体积就等于三种情况之和:

img_v3_02h1_36ea65b3-5035-49d1-80f6-8ffa7274cbbg.jpg

d ≤ -r : 球离开水面
d ≥ r : 球全部没入水中
-r < d < r : 球一部分在水里

得到小球没入水中的体积,便可以知道小球所在位置处的浮力。

物体在水中与空气中收到的阻力不同还需要动态的调整物体受到的阻力,用来模拟物体在水中收到阻力变大移动变慢的状态,根据计算小球当前的没入水中体积和小球在水下的总体积可以得到

小球最终的阻力等于 = lerp(空气阻力,水体阻力,(小球当前的没入水中体积 / 小球在水下的总体积))

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注