目录
效果
![](https://i-blog.csdnimg.cn/direct/b5e05689577d435d9e5c78be50c1bd1b.gif)
步骤
一、瞄准时拉近摄像机位置
打开角色蓝图,在事件图表中添加如下节点,当进入射击状态时设置目标臂长度为300,从而拉近视角。
![](https://i-blog.csdnimg.cn/direct/16978c82f4f0404f9786079b4c9e1ef3.png)
但是这样切换视角距离有些生硬,我们可以通过时间轴节点来做个过渡
![](https://i-blog.csdnimg.cn/direct/51b7809e8d1d437f8c32963e5871ccee.png)
两个时间曲线均从(0,0)到(0.2,1)
![](https://i-blog.csdnimg.cn/direct/a8f00a88abbf445eb79ba63db277a92a.png)
此时效果如下,可以看到在切换射击状态时,视角会逐渐拉近或拉远
![](https://i-blog.csdnimg.cn/direct/a3141b172c5d4d8eab62df0f5a318016.gif)
二、瞄准偏移
为了解决角色只能朝左右射击无法上下射击的问题,我们需要在鼠标上下移动视角的时候将枪口也进行上下移动。
- 在"AnimStarterPack"资源包中找到一个名为"Aim_Space_Hip"动画序列
![](https://i-blog.csdnimg.cn/direct/5b643d60be1a4dc1b23061c786df78e0.png)
可以看到该动画序列是角色上下左右端枪的姿势
![](https://i-blog.csdnimg.cn/direct/fce33f097a6e40c9967538fc0b4ced02.gif)
- 通过IK重定向器将该动画序列重定向给我们的角色
![](https://i-blog.csdnimg.cn/direct/f362d25fe2d7482a8064f5ed00d9b2ce.png)
此时我们就拥有了适配角色骨骼的动画序列
![](https://i-blog.csdnimg.cn/direct/267c042de7b54eb1acd52f1f1c2db4df.png)
下面我们需要对这个动画进行拆解,分别拆解成角色向上、下、左、右瞄准的动画。
复制3份动画序列"Aim_Space_Hip",这里分别命名为"Aim_Space_Hip_Center"、"Aim_Space_Hip_CenterDown"、"Aim_Space_Hip_CenterUp",分别表示角色向正前方、正下方和正上方端枪的动画序列。
![](https://i-blog.csdnimg.cn/direct/45f005be3a364d308dfe3f38fe43d3f5.png)
- 打开动画序列"Aim_Space_Hip_Center"。将时间轴指针移动到第4帧,然后移除第5帧之后的所有帧(包括第5帧)
![](https://i-blog.csdnimg.cn/direct/6aa9614d0d6e41358a2807fdcb32157a.png)
可以看到此时该动画序列就只有4帧
![](https://i-blog.csdnimg.cn/direct/254f984df3bf42b3b055e05c19e7b04f.png)
同样的方法,我们可以像这样制作角色向正下方、正上方端枪的动画序列。但是这里我们再使用另一种方法来创建角色向正下方、正上方端枪的动画序列。
- 再次打开动画序列"Aim_Space_Hip",将指针移至第10帧,可以看到此时角色向正上方端枪,然后点击"创建资产-》创建动画-》当前姿势"
![](https://i-blog.csdnimg.cn/direct/a37353b2dcda46349da953c77084918b.png)
可以看到创建的动画就只有一帧,就是角色向正上方端枪的动画
![](https://i-blog.csdnimg.cn/direct/330966e4fd364c619b3aa57882f1d16c.png)
同样的方法,在"Aim_Space_Hip"中的第20帧找到角色向正下方端枪的动画,然后创建动画序列"Aim_Space_Hip_CenterDown"
![](https://i-blog.csdnimg.cn/direct/2b9d68857a314c2496c2e5535cdc17da.png)
同样的方法再创建角色向左中、左上、左下、右中、右上、右下端枪的动画序列
![](https://i-blog.csdnimg.cn/direct/a02096268b514d339f377d780373c8a4.png)
- 选中这9个动画序列,然后鼠标右键点击"通过属性矩阵进行批量编辑"
![](https://i-blog.csdnimg.cn/direct/a8080e72ea1b447cb81c374ba7d23fa5.png)
选中这9个动画序列,然后将"Additive动画类型"设置为"网格体空间"
![](https://i-blog.csdnimg.cn/direct/207fdd1d28ac4820be54ac5d979c99c7.png)
- 打开角色的动画蓝图
![](https://i-blog.csdnimg.cn/direct/e2d463db29724e42a0399aed214bfbd2.png)
创建一个瞄准偏移混合空间
![](https://i-blog.csdnimg.cn/direct/f610cd78c11049eba61a69175478286e.png)
这里命名为"AimOffset2D_Rifle"
![](https://i-blog.csdnimg.cn/direct/a9436da9abe640418d7c7ef00eb044c7.png)
打开"AimOffset2D_Rifle",水平、垂直坐标的名称和范围
![](https://i-blog.csdnimg.cn/direct/daa2e9172fce498d85ad3e8ba95c268f.png)
将9个动画序列放置在相应的位置上
![](https://i-blog.csdnimg.cn/direct/00fe97bcd54f44ecbdeadd47fd95f968.png)
![](https://i-blog.csdnimg.cn/direct/4f1409842dc54c0a9f3a8dc549614020.png)
![](https://i-blog.csdnimg.cn/direct/a240a09ac3fb45be9c17af55457dfd85.png)
像混合空间一样,此时我们修改预览点的坐标位置,就可以看到角色不同的端枪姿势
![](https://i-blog.csdnimg.cn/direct/8475384539cc46af857a159a7bbc6724.gif)
- 再次选中这9个动画序列,然后鼠标右键点击"通过属性矩阵进行批量编辑"
![](https://i-blog.csdnimg.cn/direct/a8080e72ea1b447cb81c374ba7d23fa5.png)
"基础姿势"为"选择的动画帧"
![](https://i-blog.csdnimg.cn/direct/3abd4bc5bf2249d8b31410be286f171a.png)
"基础姿势动画"设置为角色端枪待机的动画"Idle_Rifle_Hip"
![](https://i-blog.csdnimg.cn/direct/1250d20ce5644a0c8b709095045216d5.png)
![](https://i-blog.csdnimg.cn/direct/2e832b601e6947fb8f1de4d8f045fef3.png)
- 再次回到瞄准偏移"AimOffset2D_Rifle"中会发现预览姿势不太对劲
![](https://i-blog.csdnimg.cn/direct/a47d6b9d43d14e18a100222083252298.png)
因此我们需要将"预览基础姿势"设置为角色端枪待机的动画序列"Idle_Rifle_Hip",此时预览姿势就正常了。
![](https://i-blog.csdnimg.cn/direct/c8f51853843446be83e571bce37d9bb8.png)
- 在动画蓝图的动画图表中,双击进入状态"IdleRifle"
![](https://i-blog.csdnimg.cn/direct/c1222d4ebcdd4949b3abced3d1f872b9.png)
将瞄准偏移作为该状态的输出姿势
![](https://i-blog.csdnimg.cn/direct/fcb48376b83f438fa46dae12a75485f1.png)
可以看到瞄准偏移还需两个输入值,因此我们在动画蓝图中创建两个浮点类型变量,分别命名为"Yaw"和"Pitch"
![](https://i-blog.csdnimg.cn/direct/540fad18a81a4929a756499721323a1e.png)
然后将这两个变量值输入到瞄准偏移中
![](https://i-blog.csdnimg.cn/direct/5c9710f622ef48ac83c5dd5282b77b13.png)
为了验证是否有效,我们可以修改Pitch的默认值为30
![](https://i-blog.csdnimg.cn/direct/e661adf185ea48939e188b17f853795f.png)
此时运动游戏,可以看到角色在进入射击状态后,枪口向上偏移了一些
![](https://i-blog.csdnimg.cn/direct/d4c654de56a04df99b5cee9adffcee99.png)
双击进入状态"RunRifle"
![](https://i-blog.csdnimg.cn/direct/89860d2f9f6a448ca3af0a5f725c467c.png)
添加如下节点
![](https://i-blog.csdnimg.cn/direct/498db823235a4bf384f332bdbce0f81b.png)
此时我们在动画预览编辑器中修改"Yaw"和"Pitch"的值可以看到角色向着指定的方向端枪
![](https://i-blog.csdnimg.cn/direct/c43a42688a894fa6aaefcdc6db81f195.png)
若增加角色移动速度也可以看到同样的效果
![](https://i-blog.csdnimg.cn/direct/0e4b3698355e4abe9c2ed7e6b9677462.png)
三、向指定方向射击
打开角色蓝图在事件图表中添加如下节点,用鼠标指向远方的方向减去角色自身的方向就可以得出动画蓝图中变量"Yaw"和"Pitch"的值
![](https://i-blog.csdnimg.cn/direct/821e0afd38fb411488f175447ab1c768.png)
![](https://i-blog.csdnimg.cn/direct/623ae4664ed345009ff9114198a32e97.png)
![](https://i-blog.csdnimg.cn/direct/9fd06f9b05f44c6a999eaa6caf624f9a.png)
然后我们需要在进入射击状态时显示鼠标,因此删除如下节点
![](https://i-blog.csdnimg.cn/direct/d27dafde6ef046ec986ccb4dedc5e4ca.png)
此时运行可以看到角色端枪的方向会随着鼠标的移动而移动
![](https://i-blog.csdnimg.cn/direct/ca0012505f994a33b784b9e70f985c6c.gif)
我们将鼠标瞄准的场景位置提升为一个变量,用于表示射击目标的位置
![](https://i-blog.csdnimg.cn/direct/4801c0cbd016464fba348c4b3d193861.png)
之前我们子弹发射的方向只是角色向前的方向
![](https://i-blog.csdnimg.cn/direct/a32a8d4be0bd4a0daa12527b62991789.png)
现在我们可以通过变量"AimTarget"来设置子弹发射的方向
![](https://i-blog.csdnimg.cn/direct/e058bcfe0d7f4e35ac66574ab0f879bd.png)
此时我们就实现了鼠标指哪打哪的效果(并不是精确射击)
![](https://i-blog.csdnimg.cn/direct/7bf42b36ba3f4516b2bef7c3da31b3c2.gif)
四、连发
当我们按下鼠标左键准备发射子弹前添加一个时间轴
![](https://i-blog.csdnimg.cn/direct/25ba409c7ae54e98af0b11ab13a35fc8.png)
设置时间轴为循环
![](https://i-blog.csdnimg.cn/direct/2fce84d4f96f4a33af74362ad03a36d3.png)
这样当我们按下鼠标左键后,就会一直发射子弹了。如果感觉子弹发射的频率太高,我们可以添加一个延迟
![](https://i-blog.csdnimg.cn/direct/df162983bf7a4052a33c5d0bf7bf8057.png)
此时我们按住鼠标组件不动就可以连发了
![](https://i-blog.csdnimg.cn/direct/b5e05689577d435d9e5c78be50c1bd1b.gif)