UE投掷物与样条线

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

投掷物

开始投掷

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

set timer by event/by function name
set timer是一种比delay延迟节点更高级的延迟节点。set timer延迟的节点并不像delay延迟是在delay之后的节点延迟,而是event或function里的内容延迟。Time引脚就是延迟的时间。同时,set timer可以方便地开启与关闭循环,并且可以在其他地方使用clear and invalidate timer by handle等节点清除计时器之后不再触发event或function。

接下来就是生成投掷物事件。首先打开角色的骨骼文件,在合适的位置添加一个插槽,并把投掷物的静态网格体添加到预览里,调整插槽的变化,使投掷物插槽在一个合适的位置。

然后在骨骼网格体的相应插槽的变换生成投掷物actor。生成的投掷物actor需要是一个蓝图类,你需要把投掷物的静态网格体添加到蓝图中。生成位置就是插槽位置。然后将生成的actor附加到角色的骨骼网格体上,这样actor就能跟着角色一起移动。注意:附加的时候需要把三个规则都改为保持场景。保持场景是世界位置,保持相对是相对位置。最后就是显示样条线的timer。样条线需要每帧都更新,Get World Delta seconds获取场景差量可以获取每帧之间的时间间隔,并把looping循环打开。显示投掷线条事件的内容下一部分讲解。

结束投掷

松开E键即可将投掷物投掷出去。首先需要把开始投掷更改过的设置都恢复原样并停止动画播放。然后执行投掷物actor里面的扔事件,扔事件里的内容接下来讲解。接下来清除计时器,清除生成样条线与生成投掷物的计时器。如果不清除计时器,那么如果玩家在按下按钮0.25秒之内就松开按钮,那么等待时间到达,仍然会生成投掷物与样条线。创建一个样条网格体组件的数组变量,这个变量里会装着所有你能看到的样条线网格体actor。所以释放过后应该销毁里面的所有actor。在销毁actor之前,一定要判断其是否存在,如果actor不存在而销毁,会产生报错。

投掷物蓝图

新建一个蓝图类,将投掷物的网格体拖进来,再添加一个组件:ProjectileMovement(发射物移动组件)。发射物移动组件是用来做抛物线或者子弹的组件。添加之后我们需要把激活里的自动启动给关掉,因为我们需要扔出去的时候再让发射物进行移动。接下来添加一个自定义事件。让该actor能够自由移动需要先将它从父类中移除。这三个规则仍然的保持场景。然后给与该actor一个初始速度,最后激活发射物移动组件。初始速度与角色的速度有关,所以把它连到事件的输入里。

生成actor的返回值可以直接进行蓝图通信,调用里面的事件与函数。我们需要让速度方向朝向玩家的前方。获取控制器旋转再获取向前向量就可以获取角色朝前的单位向量。我们再给z轴速度加一点值从而让它朝上方抛出。单位向量较小,所以之后需要乘一个较大的值。

演示里的投掷物并没有额外功能,你可以根据自己的需要添加功能。

在做好之后又发现了一个小问题:在结束投掷的时候执行投掷物里的扔事件之前应该判断投掷物是否存在,不存在就不执行扔事件。因为如果玩家在0.25秒之前就已经释放了就不会产生投掷物,此时在执行里面的事件就会报错。

样条线

要使用样条线,需要先添加一个组件: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个样条点中间,他们依次首位相连就形成了看到的样条线。

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇