【UE5】 - Fluid Flux : 检测水源到指定区域触发对应事件

前言

这里需要实现水体接触承灾体时的高亮效果。然而,发现水体始终无法检测到碰撞,那么该如何判断水体已经到达指定位置并触发相应事件呢?


解决办法:

使用 Fluid Flux 的接口进行检测:

添加对应的Component

这里添加一个定时器,用来检测水源的速度是否为0,来判断水流是否到达特定区域。

白色的Cube为检测点,可以看到水流可以正常检测。


目前仅可以使用该方法进行检测。

目前已尝试无法实现的办法:

1.采用碰撞盒体检测

这里先采用重叠的方法检测碰撞:

出现了一个有趣的现象:水源和碰撞盒在场景中确实发生了物理碰撞,但"与组件开始重叠时"的事件却未被触发。

既然产生了阻挡,那不妨采用“组件命中时”这个事件去尝试,同时调整碰撞盒的碰撞预设为“BlockAll”

发现虽然产生物理碰撞,但是该事件依然不会触发。但值得注意的是:Pawn依然可以被阻挡并且触发对应事件:

经过测试,用“Surface_Water”同样也无法识别碰撞


这里突然意识到一个问题:碰撞盒只有在运行时(Runtime)与其他Actor发生碰撞后才能触发相应事件。这意味着,如果在游戏运行前已经存在于碰撞盒内部的Actor,将无法触发碰撞事件。而碰撞盒从一开始就被放置在"BP_FluxSimulation"内部。

因此,将碰撞盒放置在 BP_FluxSimulation 外部,并通过运行时动态调整 BP_FluxSimulation 的位置来实现碰撞效果:

在“BP_FluxSimulation”场景中放置一个 Cube,这样可以更直观地观察BP_FluxSimulation的运动轨迹。当 Cube 移动到碰撞盒时,可以注意到左上角会显示两条碰撞信息。

目前仅 BP_FluxSimulation 与碰撞盒发生了接触,打印输出正常显示。但水源尚未触及碰撞盒,为何会出现打印信息?希望有大佬可以解答一下。


在实际开发中,不可能让 BP_FluxSimulation 动态移动,所以这个方法也无法使用。

2.采用射线检测

这里创建一条射线来检测水源的流动:

这里发现,射线检测没办法检测到扩散的水源:

这里尝试将碰撞改成BlockAll查看效果:

 这里发现在水源没流动的时候射线已经击中上面不明的物体,呈现红色

弹出后发现 BP_FluxSimulation 的高度与射线命中高度重叠,这里应该是射线命中了模拟框而非水源:

所以该方法也无法使用。


总结:

可能需要结合其他碰撞检测方法,因为水体与网格体接触时会产生交互效果。或许我只是还没找到正确的检测方式,欢迎各位大佬指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值