虚幻引擎的射线检测/射线追踪
射线检测在 FPS/TPS 游戏中被广泛应用
什么是射线检测?
两个点行成一条线 , 射线检测是从一个起始点发出一条到终点的射线 , 如果射线命中一个游戏对象,就可以获取到对象命中时的 位置、距离、角度、是否命中、骨骼 等非常多的信息 , 这些信息在射击游戏中至关重要!
如果想要让射线检测的线条不显示 , 就把线条调试类型改成无
除了Line 线条检测 , 还有其他很多种, 但是都差不多 , 这里不一一讲解了 , 大家可以自行尝试学习
我们现在来实现一下 鼠标单击后 检测前方物体 的功能
创建一个鼠标左键单击事件 ,
获取相机世界位置作为 起始点 ,
再获取 相机位置 + (相机位置x向前向量1500cm) 作为 射线终点
然后我们可以加个 判断 是否命中物体 并打印输出一下
这个break hit result 是个结构体 , 里面包含了命中物体非常多的信息
可以看到命中物体就会显示该物体的名字 , 没命中就会显示没命中物体
如果想变得更好玩一点 , 可以再加个destroy actor 节点 (销毁actor) , 只要射线命中物体 就会销毁这个物体
这样就简单实现了 开放世界生存游戏 的 拆家功能 , 哈哈!是不是瞬间成就感满满!!
再插一句 , 如果想要命中指定物体的话就在 编辑 - 项目设置 - 引擎 - 碰撞 中设置一个通道 , 默认响应 用忽略 , 这样其他物体都忽略 , 指定物体就会响应检测
然后配置具体物体碰撞规则 , 123响应改成阻挡 , 这样就会响应检测了
当然 , 游戏肯定不止这么简单 , 我也是个初学者 , 还在不断学习探索虚幻世界 , 这里只是用射线判断是否命中 , 用子弹碰撞重叠来判断应该更准确一点 , 要不然还没射中就销毁了 ! 后面如果技术进步了再完善这篇文章 !
如果大家想再变得更好玩一点 , 后面可以自己探索 , 还可以让物体拥有血量 , 然后判断一下 , 子弹击中扣血 , 血量 = 0 就销毁 , 各种细节大家自己研究哈!
注意: 射线检测尽量不用Even tick , 开销很大!
可以设置一个条件 , 比如玩家接近某个物体, 重叠时 , 才触发射线检测 , 设置定时器触发 , 减少开销!