UE4学习之路这个系列是我学习到UE4引擎的使用及相关开发技术之后,为了巩固自己学到的知识以及记录学习过程开创的学习记录系列博文,后期将不再赘述。
创建第三人称模型
我们首先在内容浏览器中创建新的蓝图类,选择character并命名Test_BP,打开之后可以看到一个胶囊体,在Mesh选项卡中添加我们的UE4默认小白人模型,调整小白人模型的方向和大小至胶囊体的合适位置。
添加Spring Arm组件,然后添加Camera子组件构成我们的摄像机镜头,根据喜好调整摄像机的位置。
在Class Default选项卡的Pawn的Auto Prossess Input设置中选择Player0这告诉引擎游戏开始时我们将获得角色的控制权,这时候我们编译运行,镜头就会自动转向摄像机的位置。
角色的基本移动
在角色蓝图界面进行如图编辑。
其中包含了获取控制方向(这里去除了Z轴的对移动的影响,这并不是我们想要的),从键盘输入值到C++代码封装好的Add Movement Input函数中实现对角色的移动,编译运行后将看到角色根据玩家输入的WASD方向移动。
接下来我们在CharacterMovement(Inherited)选项卡的Character Movement(Rotation Settings)设置中勾选Orient Rotation to Movement选项,在Class Default选项卡的Pawn设置中取消勾选Use Controller Rotation Yaw选项。前者意思是设置我们的角色面向将根据其移动方向而转向,后者是取消我们的角色一直将背面面向屏幕。编译运行后,角色身体会随着移动方向而转向,并且摄像机将一直跟着角色后面。
鼠标的镜头控制
同样,我们使用引擎中用C++代码封装好的类和函数来实现,在人物蓝图中添加如下板块
其中分别围绕Z轴和X轴进行镜头旋转,这时候我们编译运行将发现镜头会随着我们的鼠标移动而变换方向,但是新问题出现了,角色移动的方向并不会随着镜头的变换而变换,而是相对于开始游戏时的视角固定了,这时候我们需要在Spring Arm的Camera Settings中的Use Pawn Control Rotation勾选中,这表示我们的WASD移动将基于我们的镜头方向。
做到这一步角色能实现基本的移动操作了,但是很僵硬,这是因为没有添加动画效果,接下来我们将给角色的动作添加动画效果,使其看起来更加生动流畅。
给角色的动作添加动画效果
首先我们在内容浏览器中添加动画蓝图(Animation Blueprint)和混合空间(Blend space 1D),打开混合空间进行如图的配置。
我们在混合空间中分割出六个节点,从左到右添加的三个动画依次是站立动画,行走动画和奔跑动画。接下来我们在动画蓝图中创建状态机,新建Idle_Walk_Run状态,接着将刚刚创建的混合空间添加到状态中,以实现我们角色在不同状态之间的转换,同时生成speed变量用来控制状态的转换。
现在我们打开事件图表窗口,编辑如下蓝图
我们首先尝试获得人物控制,获得之后将速度向量转换为速率,设置为speed通过混合空间进而控制动画状态的转换。
最后我们将动画蓝图添加到角色模型中,编译运行,角色移动起来就会有动画效果了。
但是仅仅这样还不够,我们要想在移动中添加行走和奔跑两种状态,普通状态下行走,按住左shift键将进入跑步状态,接下来我们实现这一功能
行走与奔跑的切换
首先我们在Character Movement(Inherited)的Character Movement:Walking选项卡中将Max Walk Speed设置为120,这是我们混合空间中行走对应的速度值,也就是说我们限制了最高速度对应我们的行走动画,这时候我们编译运行,按住方向键角色将默认行走。
接下来我们打开人物蓝图,进行如下添加
现在我们再编译运行按住shift角色就可以进行奔跑啦。那最后就剩我们的跳跃了。
角色跳跃
我们通常将跳跃分解为三个阶段,起跳、滞空和落地,同样的,我们需要在状态机里添加对应的跳跃动画状态,同时将起跳和落地的循环动作取消。
接下来我们设置动画播放条件,打开动画蓝图,生成一个布尔型变量判断我们的角色是否在空中,添加如下
设置各个动画变换阶段的变换条件,分别对应是否在空中、前者动画即将结束、是否落地、前者动画即将结束。
这时候我们编译运行,角色在从高台落下时将播放跳跃动画,最后就是设置玩家通过键盘按键跳跃了,我们编辑人物蓝图,利用UE4里封装好的函数进行跳跃操作。
现在编译运行就可以平地起跳了。
至此我们从零开始创建可移动的第三人称角色的任务正式完成。