手雷是射击游戏里的必备道具,同时很多游戏里也有投掷瞄准辅助线,这次在UE5里尝试实现一下,用的是默认的第三人称模板。
实现的效果是这样的:
步骤一:做个手雷,并扔出去
这一部分比较简单
先建一个手雷的蓝图类,临时加一个球形的mesh,然后加一个RadialForce组件,来实现爆炸后的冲击效果。
同时记得把这个RadialForce组件的冲量强度调整一下,默认的太小:
蓝图逻辑如下:
然后来实现发射部分:
向前发射是暂时的先定为向前,后面会修改。
socket部分是因为没有扔雷的动画,也不太关键,就临时从头顶发射:
把这个动作绑定到鼠标左键:
到这里就可以实现固定方向的扔雷了:
同时到地上的雷会在延迟后爆炸,发出声音,会把周围的物体、人物炸飞:
步骤二:调整发射方向
这个是扔雷能瞄准的前提,如果都不能改变方向,也没什么瞄准的必要了。
发射的方向是由这个向量参数决定的:
刚才我们采用的是人物正前方,然后以固定速度发出,现在要做修改:
首先是水平方向:大多数FPS都采用的机制是,在水平角度上,手雷只能从人物面朝的方向射出,鼠标左右晃动实际上是控制的人物左右朝向变换,进而实现手雷方向的改变。
UE5第三人称默认模板里,鼠标左右晃动并不会让人物直接转动,需要在人物蓝图勾选这里:
到这里,手雷射出的水平方向就可以由鼠标左右晃动控制了。
然后是垂直方向: 垂直方向的角度是和鼠标的上下运动有关,也就是和camera的朝向有关。 所以我们完全可以把相机的forward vector当作发射方向:
但是会有个问题:在默认初始情况下,摄像机方向是和地面平行的,这也是玩家的大多数视角的方向,但是此时按照这个方向扔出手雷的话,落点会比较近,而且出射角度也不符合常理(没有人扔东西会平着仍,肯定会有向上的抛物线)。
所以我们可以加一个上抬的角度,20度:
完整的发射向量应该是这个,抽成一个函数后面还要用到:
此时再运行游戏,就可以鼠标控制发射方向的上下左右了:
步骤三:添加瞄准线
用到的核心节点就是这个: 这个节点会根据你输入的起始位置、起始速度,来预测一个物体的运动路径,返回路径点数组(OutPathPositions)。所以我们要保证这里传入的位置、速度和真正投掷手雷时的位置和速度一样,才能保证瞄准方向和实际方向一致。
此时拿到了路径点数据,但也只是数据,要把它们表现出来,就需要用到Spline组件:
首先是对所有路径点在Spline上添加Spline point:
同时给最后一个点设置类型如图:
到这一步只是给Spline组件添加了路径点,下面要给这些路径点创建mesh,也就是最后的瞄准线:
每个点都会创建一个mesh,同时把这个mesh的起始设置为当前点和下一个点
同时要在这个节点里选择创建mesh的形状和材质,也就是看到的瞄准线的样式,这里我用的cube,可以用Cylinder:
记得这里的材质要设置为:
然后再设置一下缩放,并且将这些mesh缓存起来:
每次创建前要销毁,不然每帧创建的都会留在场景里:
上面提到的创建瞄准线的过程可以放到tick里,一个变量来控制:
然后右键来控制是否显示瞄准线:
到了这一步,就能用鼠标右键显示瞄准线,然后上下左右来控制方向,左键扔出手雷了:
这篇教程也就到此为止了,而且这套方案没发现有性能方面的问题,比想象中效果要好。