这一篇会讲解射线检测点击事件、离开悬停、进入悬停事件的检测,以及关闭射线检测的事件,和射线检测蓝图的基础讲解。
创建一个简单的第三人称模板
创建一个射线检测的文件夹RadiationInspection,并且右键蓝图-场景组件-命名为BPC_RadiationInspection
将组件添加进入角色中,并将检测位置放置到角色的头部,将CameraBoom放置到头部,FollowCamera放到正对靠左一点创造越肩视角。
我们从我们的需求来查看到底需要怎么做,首先创建根据obj来进行线条追踪
通过获取世界位置连接start获取射线组件的位置
通过获取玩家控制器-获取瞄准旋转-旋转的向前的向量将向量相乘来设置并保存检测距离,随后将向量位置与组件位置相加即可的到最终的检测距离,这里的检测距离设置为300即可。
将我们可能会用到的功能进行提升变量并且分类上面三个归类设置,下三个归类调试。
然后在人物组件中进行调试,将Draw Debug Type设置为针对时长
检测效果
将找到内容折叠放到函数内,并设置为纯函数。
现在我们需要实现一些功能,分别是点击事件、悬停事件、离开悬停事件。我选择使用接口实现功能。右键蓝图创建一个接口。
创建三个事件
回到场景检测中,将HitActor设置为一个变量、复制创建LastHitActor两个用于射线检测保存状态值,将中断命中结果保存HitActor中,创建一个分支,为false则清空hitactor。
我们需要制作判断条件,第一步先判断hit actor是否有效,如果hit actor无效但last hit actor有效,则执行 Event Exit Hover事件离开悬停,并且清空 last hit actor 的值。
如果hit actor有效但last hit actor无效,则则执行 Event Hover事件进入悬停,并且把hit actor 的值传递给 Last hit actor中。
如果两个变量都有效,则检测两个变量的值是否相等,如果相等就什么都不做,如果不相等,则先执行 Event Exit Hover,再执行 Event Hover 然后再将hit actor 的值保存到Last Hit Actor中,然后将检测部分作为一个函数,将所有线连接到返回函数即可。
创建一个自定义Click的事件,判断hit actor是否有效,然后调用Event Click。
通过tick 对检测做优化,将Tick Interval设为0.02,然后清空HIT actor 以及Last hit actor即可。
在第三人称人物上创建调试按键1,用于点击事件,在按键2上用于开启和关闭检测。
射线检测完成啦