一、前言
首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容。
视频指路:https://www.bilibili.com/video/BV1s5411Y7Ry
感兴趣的朋友别忘了给这个视频一键三连。
如何利用UE4制作一个2D游戏,众所周知,UE4是EPIC为了方便自己开发FPS游戏而“顺便”研发的一个引擎,后期通过不断的完善成为了现在功能强大的游戏开发引擎,并且在GITHUB上面进行开源,可以拿到源码进行魔改,然后声称“自主研发”。
后期会挖一个坑如何魔改UE4引擎源码(需要一定的C++基础),不过那是后话,本系列内容是如何使用UE4的蓝图进行制作2D游戏,主要包括以下内容:
(一)——基础篇,介绍UE4的基础操作,以及需要用到的类
(二)——资源篇,介绍如何导入基础美术资源进行场景制作与动画制作
(三)——角色篇,如何制作属于自己的角色,并且添加属于自己的操作
(四)——NPC篇,在角色制作的基础上创造一些NPC角色并且产生对话,制造故事流程
(五)——战斗篇,制作基于UE4自带AI的敌人,进行回合制战斗。
(六)——计算篇,进行战斗完毕后要对人物的奖励进行结算
(七)——数据篇,利用服务器存储角色数据,并进行在线交互(额外内容,不影响结算可以跳过)
……后续有更新再编辑这里
前文指路:
(一)基础篇:https://blog.csdn.net/qq_33182045/article/details/117120658
(二) 资源篇:https://blog.csdn.net/qq_33182045/article/details/117227086
二、UE4引擎奶妈级教程,创建属于自己的角色动画和角色蓝图
内容接第二篇资源篇,我们导入了自己的角色每一帧动画PNG,然后转变成spirite进行角色2D资源创作,但是我们需要角色能够形成和3D资源一样的动画蓝图内容,但是混合动画空间和动画蓝图在这个2Dpaper为主的项目里不适用,我们如何制造和动画蓝图一样的状态机呢,这就涉及到了我们第一篇基础篇里面提到过的2Dpaper序列动画与枚举类,2Dpaper序列动画制造类似3D角色的骨骼动画一样的效果,而枚举类作为一个集合,用来集成做好的2Dpaper动画序列形成一个类似于状态机的东西。
1.首先在角色文件夹下面新建一个相应动作动画的文件夹,我新建了8个基础动画文件夹,分别是4个方向的待机和4个方向的走动,如图1所示
图1 新建8个动画文件夹
2.将导入的PNG纹理素材转变成sprite,具体操作在第二篇说过,我就不赘述了,因为这个是角色动画,不需要设置物理碰撞和体积预设内容,体积预设在角色蓝图里面会另外设置。
我们先在对应的动作文件夹下面新建一个2Dpaper动画序列,具体操作是在资源浏览器当前文件夹——右键——paper2D——paper图像序列,明明为forward_idle,如图2所示
图2 新建paper图像序列
3.双击新建的forward_idle图像序列对象,进入详情,如图3所示
图3 图像序列详情
这里需要解释一下,我们在第一篇基础篇的时候介绍过这个界面,但是需要具体实际操作。点击“细节”当中的“关键帧”旁边的“+”符号,新建一个元素组,来存储图像序列,因为美工组给的资源是8帧的图像,我就新建了8个元素,分别是从元素0-元素7.
然后点开每个元素的“▲”符号,看到下拉内容,将刚才新建好的动画帧sprite拖入元素内容,如图4所示
图4 添加sprite进入序列帧
这样按顺序从第一帧到第八帧操作,将所有美术资源进入图像序列,这时在界面左边会自动播放做好的序列动画,但是有可能动作达不到预期,比如有卡顿的感觉或者是不协调的感觉,可以修改“细节”界面的每秒帧数,我这里调整为4帧每秒,也就是说1帧播放时间只是0.125秒,会做到相对流畅
4.重复完成了上述步骤,做了8个基础动画之后,我们需要新建一个文件夹,命名为“BP”,里面存放角色蓝图和动画枚举,首先我们新建一个枚举,命名为”character_anim“,共存储8个元素组,对应8个基础动画,如图5所示。
图5 基础动画枚举
这里命名一定要规范,和自己的动画一一对应,否则后面不好找。
三、制作自己的角色
1.基础动画枚举做好了,接下来我们制作2Dpapercharacter蓝图,在BP文件夹右键——蓝图——搜索2Dpapercharacter,然后点击确定,如图6、7所示
图6 选择papercharacter蓝图
图7 papercharacter蓝图详情界面
当我们新建好这些内容之后,在左侧组件当中选择sprite,然后再细节界面选择基础的动画序列,我这里选择的是正面的待机动画forward_idle,如图8所示,这样这个2D角色的基础待机动画就出现了
图8 引入Sprite动画序列
此时由于我们在第二篇当中编写的基础地图是沿着X轴旋转了-90°的,我们的角色基础动画也要同样操作,才能协调,将旋转的“X”的值设置为图8当中的-90°,然后保存当前设置参数
2.同3D角色蓝图一样,我们要给这个2D角色绑定一个相机臂和一个相机,在左上角的组件添加一个“SpringArm”,再在这个组件下面添加一个“camera”,图8中已经做好了,但是我们要让摄像机垂直拍摄到角色的Sprite,所以我们要对悬臂进行设置同样的-90°,如图9所示
图9 设置摄像机与悬臂
这时候我们在关卡的世界详情设置里面把默认PAWN设置成当前2D角色,并在地图中间添加一个playerstart,点击上方的“运行”查看情况,就得到了如图10所示的基础视图
图10 玩家进入关卡视图
此时窗口界面就是摄像机对应的视图了。
3.角色的基础内容设置好了,我们还需要玩家能够操控角色,首先点击上方菜单的“编辑”——“项目设置”,如图11所示
图11 打开项目设置
然后再在项目设置详情中添加输入——轴映射——添加数组元素——上下、左右,分别对应WS,AD,上下移动,左右移动,如图12所示
图12 添加输入操作
其中上是1,下是-1,左是-1,右是1,为何要这样操作,后面会有对应的详细讲解。
添加输入映射完毕后,再双击角色蓝图,在“事件图表”中添加引入上下、左右的输入操作,如图13所示
图13 添加上下、左右输入
4.添加完操作映射之后,还需要让角色根据操作映射进行移动,我们先不说蓝图如何操作,在角色蓝图左侧添加两个变量,分别是“left_right”、"up_down",然后返回世界大纲视图,点击自己需要使用的角色,如图14所示。
图14 角色平面示意图
这里与3D角色蓝图不同的是,我们无法直接使用角色的movement以及左右移动,因为这是个2D平面,只在X-Y直角坐标系中运行,所以能移动的方向只有X方向与Y方向,但是在这个方向上移动还要考虑3D模型的物理体积碰撞,是个很别扭的操作,我们只能遵循UE4的规则来操作。
通过图14的示意得知,WS的上下操作对应的是Y轴方向上的移动,AD的左右操作对应的是X轴方向上的移动,所以我们根据示意图的效果,回到角色蓝图,在刚才的上下操作映射节点后面添加”添加角色移动输入“节点,这是属于2Dpaper角色的移动节点,通过刚才我们得知,左右需要在X轴上操作,所以我们将World Direction的世界方向向量的X轴设置为1,其他方向设置为0,我们都知道向量是有方向和大小的量,但是我们这里只需要它的XYZ坐标的方向数值,所以X设置为大于0的自然数就行。同理上下操作是在Y轴上移动,我们也将World Direction的Y方向向量设置为1,其他为0,,如图15所示
图15 添加角色移动输入
然后如链接好,再点击编译,再把关卡运行一下,角色就可以在地图上面进行移动了。如图16所示
图16 角色在场景中移动过
配合上如图17的蓝图示意内容,添加update_animal方法,调用动画枚举
图17 调用动画枚举
5.动画枚举调用原理,首先我们在左侧”变量“当中引入刚才的character_anim枚举,如图18所示。当角色只向右走的时候,我们判断X方向的向量与0的关系,如果大于0就往右走,播放run_right动画,小于0就往左走,播放lleft_run动画,同理上下也是,如果同时按下两个方向键,且不冲突的情况下,就以先按下的为有限播放,这样就可以有效地播放动画了,那么update_anim和stop_anim的方法蓝图如图18所示。
图18 引入character_anim
图19 update_anim\stop_anim
10.由于这个项目需要在移动端设备当中运行,那么模拟移动端设备最好的方法是模拟摇杆,我们在第一篇基础篇的时候说过有一个类叫做”触摸界面设置“,同理是在”项目设置“——”输入“当中,找到它,并且按左方的”“查找文件路径,并复制一份,设置为自己的命名,如图20所示
图20 移动平台查看
复制好了相应的内容之后,再进入这个触控界面详情编辑,将WS,AD的操作映射关联进去,如图21所示
图21 触控界面的按钮设置
保存完毕之后,我们为了能让玩家操作角色的时候出现鼠标模拟手指点击,需要再关卡蓝图当中允许鼠标指针出现,设置如图22所示
图22 允许光标出现
然后点击运行,就可以看到我们使用虚拟摇杆操作角色了,如图23所示
图23 虚拟摇杆操作角色
这样我们基础的角色操作就完成了。
四、总结
角色的操作从3D领域转入2D领域思维要进行一定的转换,首先要明白平面直角坐标系只有XY两个方向,其次就是在这个2D关卡当中还是遵循3D物理操作的,所以需要更多的一步思维转换,其他的大致上和3D模式没什么区别,但是一定要解放思想实事求是,灵活使用面向对象编程思想,这样就会更好的进行下一步开发。下一次更新我们将会讲解如何创造带有AI的NPC以及对话基于两种不同模式的NPC对话,如果觉得文章可以的话欢迎点赞评论转发。