本文简单介绍如何在虚幻引擎里让角色释放投掷物,并且在持有投掷物期间显示其轨迹。
投掷物

开始投掷
按下按钮E进入投掷状态。首先应该移动摄像机位置,将正背后的摄像机移动到靠近肩部。然后播放抬手动画,并且将旋转朝向运动关闭(关闭掉此项功能后角色朝向就不受角色的运动方向影响)、使用控制器旋转打开(打开后鼠标移动就能使视角旋转)。因为抬手动画的混入时间大概0.25秒,所以延迟0.25秒生成投掷物与样条线。

接下来就是生成投掷物事件。首先打开角色的骨骼文件,在合适的位置添加一个插槽,并把投掷物的静态网格体添加到预览里,调整插槽的变化,使投掷物插槽在一个合适的位置。
然后在骨骼网格体的相应插槽的变换生成投掷物actor。生成的投掷物actor需要是一个蓝图类,你需要把投掷物的静态网格体添加到蓝图中。生成位置就是插槽位置。然后将生成的actor附加到角色的骨骼网格体上,这样actor就能跟着角色一起移动。注意:附加的时候需要把三个规则都改为保持场景。保持场景是世界位置,保持相对是相对位置。最后就是显示样条线的timer。样条线需要每帧都更新,Get World Delta seconds获取场景差量可以获取每帧之间的时间间隔,并把looping循环打开。显示投掷线条事件的内容下一部分讲解。
结束投掷
松开E键即可将投掷物投掷出去。首先需要把开始投掷更改过的设置都恢复原样并停止动画播放。然后执行投掷物actor里面的扔事件,扔事件里的内容接下来讲解。接下来清除计时器,清除生成样条线与生成投掷物的计时器。如果不清除计时器,那么如果玩家在按下按钮0.25秒之内就松开按钮,那么等待时间到达,仍然会生成投掷物与样条线。创建一个样条网格体组件的数组变量,这个变量里会装着所有你能看到的样条线网格体actor。所以释放过后应该销毁里面的所有actor。在销毁actor之前,一定要判断其是否存在,如果actor不存在而销毁,会产生报错。
投掷物蓝图

新建一个蓝图类,将投掷物的网格体拖进来,再添加一个组件:ProjectileMovement(发射物移动组件)。发射物移动组件是用来做抛物线或者子弹的组件。添加之后我们需要把激活里的自动启动给关掉,因为我们需要扔出去的时候再让发射物进行移动。接下来添加一个自定义事件。让该actor能够自由移动需要先将它从父类中移除。这三个规则仍然的保持场景。然后给与该actor一个初始速度,最后激活发射物移动组件。初始速度与角色的速度有关,所以把它连到事件的输入里。
生成actor的返回值可以直接进行蓝图通信,调用里面的事件与函数。我们需要让速度方向朝向玩家的前方。获取控制器旋转再获取向前向量就可以获取角色朝前的单位向量。我们再给z轴速度加一点值从而让它朝上方抛出。单位向量较小,所以之后需要乘一个较大的值。
演示里的投掷物并没有额外功能,你可以根据自己的需要添加功能。
样条线

要使用样条线,需要先添加一个组件:Spline 样条组。样条线需要每帧更新,所以我们先销毁里面的所有actor并清空数组,再清除样条组件里的样条点。然后就是生成样条线的部分了。要生成样条线需要生成样条点,再在样条点处生成样条网格体组件,样条网格体组件就是我们能够看到的样条线。
要生成样条点需要知道样条点的位置,这需要用到节点:Predict Projectile Path By traceChannel 按检测通道预测发射物路径。只要将物体的起始位置与速度输入给该节点,该节点就能自动计算出路径的位置。预测用的位置与速度与投掷物的位置与速度相同。因为计算的路径之中撞到物体就会停止,所以我们应该让它忽略投掷物自身,不然就显示不了样条线。在Actors to Ignore里make一个数组,数值的元素就是生成的投掷物actor。节点会返回路径包含的坐标,它是一个数组,我们用for each loop在索引处添加样条点Add Spline Point at Index。添加完样条点后就可以生成样条网格体组件了。
我们可以让最后的那2个点不生成样条网格体组件,给剩下的样条点添加样条网格体组件Add Spline Mesh Component,用For loop。添加样条网格体组件,我们需要先制作样条的静态网格体与它的材质。样条的静态网格体就是一个简单的圆柱,你可以在blender等3D建模软件中快速完成模型并导入到虚幻引擎中。它的材质有一些小不同。新建一个材质,在细节面板中搜索使用样条网格体,打上勾,不然生成的样条网格体组件就没有材质。样条网格体材质可根据需要自己制作,演示里用的无光照的着色模型,并且连接一个颜色到自发光颜色上。
点击Add Spline Mesh Component这个节点,在细节面板里把静态网格体设置为你制作的样条静态网格体,在下面还有一个向前轴的选项,如果你的圆柱体朝上的话,那么需要把它改为Z。因为我们制作的静态网格体大小可能不太适合,我们可以用setStartScale与SetEndScale设置样条网格体组件的缩放。用Set Start And End来设置样条网格体组件的位置。我们需要获取对应样条点的位置与切线Get Location And Tangent at Spline Point来作为样条网格体组件的起始位置与切线,下一个样条点的位置与切线来作为样条网格体结束的位置与切线。这样样条网格体就在每2个样条点中间,他们依次首位相连就形成了看到的样条线。

这样,样条点与投掷物就完成了。