UE4 射击游戏项目实战开发 002 ~初学笔记

UE4 射击游戏项目实战开发 002 − − 开 发 笔 记 \textcolor{red}{--开发笔记}
本 文 档 我 们 开 始 记 录 如 何 控 制 光 标 跟 着 鼠 标 转 的 操 作 。 蓝 图 操 作 \textcolor{blue}{本文档我们开始记录如何控制光标跟着鼠标转的操作。蓝图操作}

上个文档记录到十字准星制作完成,如下图:

在这里插入图片描述

此时移动鼠标,会出现一个现象就是十字准星在跟着鼠标转,人物不转,我们要调节一下。

  1. 打开蓝图myFpsCharacter,进入蓝图编辑页面,选择myFpsCharacter(self),找到右侧的Pawn卷帘选项打开,找到Use Controller Rotation XX(三个选项),勾选Use Controller Rotation Yaw。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这样任务就在左右方向跟着鼠标移动了(注意:Yaw是摇头方向,Pitch是点头方向,Roll是侧头方向,想象一下侧翻转)

在这里插入图片描述

但是,这个控制并不自然,太僵硬了,或者说不是我们想要的结果。

我们取消勾选Use Controller Rotation Yaw,选中CharacterMovement(Inherited,在面板中找到Character Movement:(Rotation Settings)

在这里插入图片描述

勾选User Controller Desired Rotation ,取消勾选Orient Rotation to Movement,并将Rotation Rate 的Z设置成300.0,保存运行。

在这里插入图片描述

这样人体就会随着鼠标移动的同时感觉延迟一些,符合自然状态。

在这里插入图片描述

但是,我们发现,此时不论鼠标移动多大角度,人体也跟着移动,不符合我们想要的自然结果,我们想让人体在鼠标移动小于80度角度的时候不跟着动,超过80度才进行转动。

  1. 接下来,我们制作蓝图节点来实现这个操作。

打开蓝图myFpsCharacter,进入蓝图编辑页面

在这里插入图片描述

显示Event Graph 页面,我们会看到有几个模块的蓝图,红框的是鼠标的操作。

在这里插入图片描述

==注意:==蓝图结点都是由事件Event驱动的,因此所有的事件都是红色标签。

在这里插入图片描述

接下来,我们开始实现我们想要的功能蓝图节点。

我们要实现过程的几何解释如下:

在这里插入图片描述

如上图,红线为摄像机原来的指向,也是人物面朝的方向,我们当旋转摄像机的到黑线的指向时候,和原来的方向会有Detla的角度,想右侧旋转到蓝线的时候会有-Detla的角度。我们可以定义这两个角度值来约束旋转。

思考完成之后,我们开始创建节点,首先我们要获取人物面朝的方向对象。

1.我们拖拽CapsuleComponent(Inherited)胶囊体组件,以期获取它的正前方角度,也叫向量,上图中红色箭头

在这里插入图片描述

为啥要获取胶囊体的呢?其实也可以获取人物组件的,只不过胶囊体包裹着人物模型的,所以是一样的

在这里插入图片描述

2.获取移动鼠标的角度操作,要获取的是Pawn的控制,再获取Rotation

在这里插入图片描述

在这里插入图片描述

这个角度就是鼠标移动时候的角度向量,黑色和蓝色箭头的方向。

这两个角度设置好之后,我们要进行求角度差,然后将角度差和80度进行比较,大于80度的说明鼠标移动幅度大,人物跟着移动,小于80度的,就不移动了。

在这里插入图片描述

Delta的值就是两个角度的差,如图A-B.

由于旋转有三个方向,我们只选择Yaw方向,所以我们把旋转拆分一下,选择Break Rotator。

在这里插入图片描述

选择Yaw方向的值和80进行对比。输入>符号,选择float > float,创建>比较的节点,输入80。

在这里插入图片描述

在这里插入图片描述

但是要考虑左右移动,左侧为80,右侧为-80,所以对移动的值取绝对值ABS,如图:

在这里插入图片描述

在这里插入图片描述

符号>节点返回的是Boolean类型的节点,如果大于80,就是True,因此我们可以根据这个修改跟随旋转的设置按钮。

在这里插入图片描述

跟随的按钮还是前面提到的那个Use Controller Desire Rotation

在这里插入图片描述

由于旋转是连续的,我们要设置一个持续的时间Event Tick。

在这里插入图片描述

然后创建条件判断节点来判断事件发生与否。(也就是说Tick和Branch两个节点一起创建了一个判断真假的功能)。

在这里插入图片描述

将前面创建的判断大于80的结果连接到Branch的Condition节点上进行判断。如果是True我们进行设置。拖拽CharacterMovement(Inherited)到蓝图编辑面板,找到它的Set Use Controller Desire Rotation。

在这里插入图片描述

将Branch的True连接到Set上,并将Set的勾勾上。代表执行了Use Controller Desire Rotation操作。

在这里插入图片描述

但是如果旋转角度很小的话,我们就不让其跟随鼠标移动了,就要设置接近于0的值,我们设置阈值为0.001。

在这里插入图片描述

由于其输出是Boobean类型,所以我们要添加一个判断Branch分支。

在这里插入图片描述

如果满足接近于0的值,为True设置,复制CharacterMovement(Inherited)和Set节点,设置取消勾选。

在这里插入图片描述

另外,值在0-80之间的值也是不跟着鼠标移动,所以我们将最先的条件判断小于80的False连接到取消勾选的部分(建议设置成60度,后面会更好)。

在这里插入图片描述

编译运行,就可以去游戏中查看结果了。

在这里插入图片描述

真实场景中,我们的人物和十字准星的位置是这样的:

在这里插入图片描述

然而我们的是这样的:

在这里插入图片描述

所以我们进行调节一下,将人物位置朝下,摄像头偏移一些。

选中CameraBoom向上移动摄像机。

在这里插入图片描述

选择FollowCamera调节摄像机位置,使得人物向左偏移。

在这里插入图片描述

结果展示:

在这里插入图片描述

优化部分,完全可以将Get Control Rotation替换掉上述节点:

在这里插入图片描述
然而,当我们移动鼠标的时候,行走状态很怪异,就是会侧滑。

在这里插入图片描述

为了解决这个问题,我们定义鼠标左右移动和前后移动时候人物跟着方向转动的操作。

首先创建向前后节点和向左右节点,向前为1向后为-1,向右为1向左为-1,因此每一个值都不为0,为0的时候idle。

在这里插入图片描述

在这里插入图片描述

不论是向前后还是向左右,他们是或事件,因此,我们需要对这两个做or操作。

在这里插入图片描述

接着输出boolean值,True则打开Use Controller Desired Rotation,否则关闭。

在这里插入图片描述

连接到每一帧的事件监测器上。

在这里插入图片描述

保存,最终结果展示。

在这里插入图片描述

整理一下节点。

选中需要坍塌的节点右键鼠标选择Collapse Nodes,进行坍塌处理。

在这里插入图片描述

处理结果并C键整合。

在这里插入图片描述

完成工作,爽歪歪!!
∣ − − − − − − − − − − − − − − − − − − 俺 是 分 割 线 − − − − − − − − − − − − − − − − − − − − − ∣ \textcolor{red}{∣−−−−−−−−−−−−−−−−−−俺是分割线−−−−−−−−−−−−−−−−−−−−−∣} 线

自己创建的两个群,一个是做3D方面的(包括算法图像处理,以及三维模型生成等),另一个是代码编程群,两个群都是为了交流技术的,禁止发广告。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路卿老师

大哥大姐给点吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值