UE 官方Water插件 为物体添加浮力
一、为物体添加浮力
参考视频:
UE5地编教程-14.水体浮力
如何制作UE5水面浮力效果 | UE5教程
【功能】完美浮力的水体系统
【UE5教程】如何制作一艘可驾驶的小船,并把水排出去
1.添加插件
首先,确定已经添加三个插件:water,NiagaraFluids,Landmass
2.新建蓝图
有两种选择
1)直接继承staticmeshactor
2)创建actor,添加一个staticmesh,并使其成为新的根
注意:不管哪种方式,都必须使staticmeshcomponent成为根,不然物体无法浮起
开启staticmeshcomponent的模拟物体SimulatePhysics,不开启的话物体无法浮起来
3.添加组件Buoyancy
在右侧的细节面板中,点开Buoyancy有一系列可以调节的参数
我们需要先为Pontoons浮桥添加元素,这代表着物体受浮力的点。
而Center Socket需要我们在对应的模型上创建对应的插槽。
4.为物体模型添加插槽
在此处我为模型添加了前左,前后,后左,后右4个的对应的插槽位置。
然后在Pontoons浮桥将对应的名称添加进来,注意CenterSocket要和插槽名称相同。
到了这一步,将对应的物体放进海面上,就已经可以浮起来了。但是有侧翻的风险。
注意:将物体放置到场景内时,不能直接贴着水面放置,那也会直接沉下去,需要距离水面有一定的高度,这样它下落接触到水面后才会上浮。
5.调整相关数值
1)防止物体直接下沉
需要将模型物理的mass(kg)调为自定义
数值不能过高,体重太大会导致物体直接下沉,浮不起来
推荐数值为0~400,可根据需求进行调整。
2)防止物体侧翻
可以调整LinearDamping和AngularDamping两个参数
LinearDamping决定物体上下运动拖拽的力,即一开始将物体放置在水面上一定距离,运行时,LinearDamping数值越大,物体下落得越慢。
决定了物体翻转旋转的力,数值越小,物体越容易侧翻。
因此如果物体放在水面上容易侧翻时,可以将AngularDamping数值调大。
3)确保物体模型枢轴点在物体中心
当模型的轴心不在中心时,受浮力的物体容易因为受力不均匀而起飞消失。
解决方法:
-
将对应的模型拖到场景里。
-
在左上角工具中选择建模模式,选择Transform中的Pivot
-
在盒体位置中选择center(中心)和bottom(底部),修改枢轴点的位置,之后选择接受。
这样该模型的中心点就被改变了,不需要重新导入模型。
6.可视化Buoyancy效果
详细见第四个教程链接
打开控制台,输入r.Water.DebugBuoyancy
红色小球就是创建的pontoons的可视化效果,可根据其对Pontoons的数量,大小,位置进行调整。
7.排出船内的水
创建水面遮罩
选择海面,找到水面的父材质
在材质的最后添加“设置材质属性”节点
左侧设置为透明度遮罩
创建DistanceToNearestSurface,限制在0-1之间
二、动态修改水波参数
1.参数设置
控制水波大小的参数如图所示
WavesSource还有另一个选择,但是Water waves asset reference无法在蓝图中cast到
并且WaterWavesAsset中本质上还是使用了对应的WaterSource,若是正常使用的话,使用Water waves asset reference可以方便管理和替换资产,但是需要使用蓝图动态修改水波参数时,还是需要使用到默认的GerstnerWaterWaves。
2.蓝图函数
3.c++函数
查到最后发现是GerstnerWaterWavess中的WATER_API void RecomputeWaves(bool bAllowBPScript);函数在起作用
当蓝图运行时,更改GerstnerWaterWaveGeneratorSimple里的值,并不会触发该更新函数。但在编辑器运行修改对应的值时,会自动触发该更新函数。
此函数为public,可以被调用,因此可以新建一个函数库,手动写一个函数来触发该水波的更新函数,并使其能够在蓝图中调用。
只要在运行下更改对应的值控制水波时,需要调用一个更新函数。
三、船只在水面上行驶
Youtube参考视频:Unreal Drivable Boat
1.添加推进器AddForce
采用时间轴动态设置船只位置,无法使船漂浮在水面上,因此无法动态对水波海浪形成响应。
选择采用推进器的方法,推动船只行驶,这样既可以保留船只的物理状态也可以使其能在水面上漂浮。
2.驾驶船只
如果需要驾驶船只,可以采用以下方法:
1)chaos载具系统
这个后续有需要的话再进行学习)目前暂时没时间拓展
2)使用movemnt传值
举例:小船向前行驶
首先,船只的父类需要是pawn。
在蓝图中右键调出Move Forward,获得向前的前进量。
获取actor向前的方向,和输入轴相乘,再额外乘上一个控制速度的浮点值。将得到的结果给小船提添加力即可。
若是小船需要向后或者向前后左右行驶,需要依据类似操作完善整体的操作流程。
四、为行驶船只添加尾波
添加相关的粒子效果即可,这个暂时也没拓展,有时间再补充了