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向前的方向,和输入轴相乘,再额外乘上一个控制速度的浮点值。将得到的结果给小船提添加力即可。
在这里插入图片描述
若是小船需要向后或者向前后左右行驶,需要依据类似操作完善整体的操作流程。

四、为行驶船只添加尾波
添加相关的粒子效果即可,这个暂时也没拓展,有时间再补充了

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值