效果
步骤
1. 先新建父类为Actor的蓝图,这里命名为“BP_发射物”
打开“BP_发射物”,添加一个球形的静态网格体和一个发射物移动组件
2. 新建一个父类为角色的蓝图,这里命名为“BP_绘制抛物线”
打开“BP_绘制抛物线”
我们希望可以通过控制鼠标滚轮来控制发射距离的远近,因此先在事件图表中添加“鼠标滚轮轴”节点,如果我们将鼠标向前滚,该节点的引脚“Axis Value”输出的值就是正的,反之则是负的。
添加一个浮点类型的变量,这里命名为“发射距离”,默认值为400(cm)
将滚轮值乘100再加上初始的发射距离就得到抛物线的终点
因为不可能抛无限远,这里再添加一个限制范围,然后更新“发射距离”
接下来开始绘制抛物线
先添加两个自定义事件,分别命名为“开启抛物线”和“关闭抛物线”,当按下空格键的时候就执行“开启抛物线”,当松开空格键的时候就执行“关闭抛物线”事件。
在Tick后添加一个“Gate”门节点,当执行“开启抛物线”时就打开Tick事件的执行,反之则关闭
接下里添加一个本功能最重要的节点“按照对象类型预测发射物路径”,该节点可以根据传入的发射起始位置和发射速度来预测出抛物线上所有点的位置。引脚“Parojectile Radius”表示抛物线路径上绿色小球的半径,这里设置为35;引脚“Sim Frequency”表示绿色小球的密集程度,该值越大,输出引脚“Out Path Position”输出的点迹就越多;引脚“Max Sim Time”表示最大的预测时长,该值越大能够预测的抛物线的轨迹就越远。输出引脚“Out Path Position”输出的是预测出的抛物线上所有的点迹;输出引脚“Out Last Trace Destination”是最后一个点的位置。
为了能够编译通过,先将“按照对象类型预测发射物路径”节点的输入引脚“Object Types”提升为变量,默认值设置为“静态场景”
为了方便观察从哪一个位置发射出物体,这里先给“BP_绘制抛物线”添加一个球形的静态网格体,然后设置该网格体的无碰撞。
给球体一个初始的抛射方向
传入球体的初始位置和发射速度,其中发射速度由球体向前的方向*发射距离
添加一个样条组件
循环遍历所有的抛物线点,然后在每一个抛物线点位置处添加样条点
添加样条点后,继续添加样条网格体
样条网格体使用圆柱,向前轴设置为Z轴
设置样条网格体的起始和结束缩放
设置每个样条网格体的起始位置和结束位置
为了能够实时更新绘制抛物线,这里需要将每一个样条网格体添加到数组中
然后在开始绘制的时候先清空所有的样条点、样条网格体、抛物线路径点
折叠到函数,这里命名为“F_清除抛物线”
在事件“关闭抛物线”执行后再次调用“F_清除抛物线”
再添加一个摄像机组件,设置一下位置
3. 将“BP_绘制抛物线”拖入视口,然后设置自动控制玩家为玩家0
此时运行效果如下所示,可以通过空格控制抛物线的轨迹的绘制与清除,通过鼠标滑轮控制抛物线的抛掷距离
我们发现样条网格体(圆柱)太大了,将网格体缩放改小一点
再将摄像机位置和旋转改一下:
此时效果如下:
如果还觉得抛物线绘制距离太短,我们可以将“Max Sim Time”的值改大一点
如果不想显示绿色的小圆球,可以将“Draw Debug Type”设置为无
此时效果如下:
如果希望能够沿着抛物线的方向抛射物体,我们可以在“关闭抛物线”事件执行后生成Actor,并设置发射物移动组件的速度。
此时效果如下所示:
参考视频:
https://www.bilibili.com/video/BV1jc411j74M/?spm_id_from=333.999.0.0&vd_source=36a3e35639c44bb339f59760641390a8