UE5教程-通过一个TopDown案例快速入门虚幻蓝图-1

文章发布时间:

最后更新时间:

页面浏览: 加载中...

前言

本教程通过一个俯视角游戏案例,让大家在边做游戏的同时,快速了解ue蓝图开发的部分功能。

项目创建

1
打开虚幻引擎,本教程的引擎版本是5.4.4,不过版本不同影响不大,选择自己喜欢的版本即可。
点击左侧 游戏 然后选择空白项目,接着更改右下角的项目默认设置,参数为 蓝图/桌面/最大/(空)/(空) ,最后设置项目名称,我的项目名为 topdownrouge ,最后选择项目位置,一定要确认保存路径为纯英文,不然会报错,点击创建,等待几秒钟,项目就建立好了。

编辑器界面介绍

编辑器页面这里就不多赘述了,大家想去了解的点击这个链接即可。

新建关卡

进入引擎后,由于我们项目为俯视角肉鸽,我们至少要制作两个地图,一个地图为游戏主界面,一个地图为游戏地图。在创建地图之前,我们先创建一个文件夹用来保存我们的地图。
1
在内容管理器中右键新建文件夹,命名为 map
1
1
点击编辑器左上角的 文件/新建关卡/空白关卡 ,创建好空白关卡后按ctrl+s保存关卡地图在 map 文件夹中,命名为 Map_01,同样的操作建立并保存linguistic一个关卡Map_menu

修改项目设置

修改默认地图

1
点击引擎左上角 编辑/项目设置/地图和模式, 编辑器开始地图 改为Map_01游戏默认地图改为Map_menu。这样修改之后我们游戏导出之后的界面就会是我们的菜单地图,而我们打开引擎调试的默认地图则是游戏地图。

其他设置

1
1
接着我们在项目设置界面上边栏搜索界面搜索 动态模糊抗锯齿方法 ,将动态模糊关闭,抗锯齿方法设置成无。
我们的游戏是2d游戏不需要动态模糊,因为是像素游戏,也不需要抗锯齿。

创建蓝图

游戏模式蓝图

蓝图是利用c++封装特性的、已经封装好的代码,是UE5最主要的编程方式,在创建蓝图之前,我们先在目录里创建文件夹 blueprint 用来保存蓝图类。
1
要创建的第一个蓝图是游戏模式基础蓝图,我们要在这个蓝图里写游戏模式相关的代码。右键 新建蓝图类/游戏模式基础 ,命名为BP_gamemode

点击引擎左上角项目设置/游戏模式/默认游戏模式,改为刚刚建立的游戏模式BP_gamemode
接着在编辑器右侧世界场景设置/游戏模式重载,改为刚设置的游戏模式BP_gamemode
这样我们游戏模式蓝图就设置好了。

玩家控制器蓝图

要创建的第二个蓝图为玩家控制器蓝图,在这个蓝图里,我们主要写的是玩家移动控制等的代码,同样新建蓝图类/玩家控制器,命名为BP_PlayerController

PaperZD插件

UE本身自带的2d游戏系统较为简陋,但是有一个插件为2d游戏开发提供了完整的动画蓝图和状态机系统,它就是PaperZD,我们要在fab上下载PaperZD
fab和paperZD下载链接及教程,这里我就不多赘述了。
1
fab下载好PaperZD后,点击左上角编辑/插件/已安装插件,勾选paperzd即可。
重启引擎后即可使用插件。

素材导入

创建好蓝图之后,我们就可以开始导入素材了,UE5的素材导入方法十分简单,只需要打开你保存素材的文件夹,然后把你需要的素材拖入引擎的目录中就行。

角色素材导入

这节课我们先导入角色的移动部分的动画素材,新建character文件夹,在里面新建move文件夹,将你的角色动画的png素材拖进move文件夹。此时这些素材作为纹理保存在UE中,你会发现他们现在不是很清晰,我们需要更改两个设置。
1

  1. 打开纹理,在左侧的搜索栏中搜索过滤器,把过滤器设置为最近。此时发现图片变清晰了,但是仍然有变色的部分。

  2. 退出纹理界面,右键纹理prite操作/应用paper2d纹理设置

现在,这个素材就和我们在绘画软件打开的图片一样清晰了。

当我们的素材是一个动作素材、由几张连续的帧动画组成时,我们要把它们分别提取出来。

  1. 先重复上面的步骤。

  2. 右键sprite操作/提取sprite
    1

  3. 进入提取sprite窗口后,一般情况下,ue的自动提取功能会框选出精灵,但是只会严格围绕有色像素点,会导致我们提取的内容不规范,这里建议手动提取:将Sprite提取模式设置为网络,然后选择适合你的素材大小的单元宽度和高度进行裁剪,我的素材是32x32的,所以我的裁剪时的大小也是32x32。
    1

  4. 按住ctrl选中刚刚裁剪出的,一系列的动作动画,右键创建图像序列。将创建好的序列打开,按需求在细节里调整调整帧数。
    1
    我的动画是4帧,所以我选择每秒8帧。

地图素材导入

导入完角色素材,接下来是地图素材,在导入素材之前,我们同样要在map里创建文件夹tile用来保存初始素材。
导入你需要的地图素材,同样的方法过滤器设置为最近。退出右键sprite操作/应用paper2d纹理设置。

瓦片地图

2d游戏地图的绘制依靠的是瓦片集,通过创建好的瓦片集作为调色板,在瓦片地图中绘制,绘制好的地图导入map文件即可作为地图背景。
1
首先,我们点击刚刚预处理好的地图素材,右键创建瓦片集。
1
打开瓦片集,设置瓦片大小为适合的大小,例如我的素材每一个瓦片是16x16。
1
退出瓦片集,右键瓦片集创建瓦片贴图,命名为Map_01
1
然后就可以开始绘制瓦片地图了。

瓦片地图的导入

将绘制好的瓦片地图拖进地图的视图里,调整位置为0,0,0,旋转-90,0,0。
1
此时我们发现地图的亮度很亮,是因为引擎自带曝光,我们需要给它添加一个后期处理体积。
1
1
一般情况下后期处理体积只会处理体积范围内的部分,需要我们选定无限范围,然后将后期处理体积移到不影响我的操作的位置,调整曝光,将最大曝光和最小曝光设置为一,并按照你的需求调整曝光补偿。

地图碰撞体积

地图碰撞体积添加的方式有很多种,这次我们使用的方法是直接创建碰撞体actor,并将其放在地图下方,以达到给地图添加碰撞体积的效果,
1
打开actor放置面板,并在搜索栏搜索block,将阻挡体积拖进视图。
1
1
通过顶部视图调整瓦片地图位置和碰撞体大小使碰撞和地图对齐,也可以略大。
1
再调到前视角,利用调整画刷变换中的数值使碰撞和地图对齐。

PaperZD蓝图

完成这些前期准备后,我们可以开始制作角色的动作蓝图部分了。
1
首先,在蓝图文件夹里添加paperzd蓝图,命名为BP_player。我们主要通过该蓝图控制角色的动作行为。
1
打开蓝图,点击左侧sprite,在细节里找到精灵/源图像序列视图,选择刚刚制作的动作序列,这样我们就能在视图里预览了。修改sprite的旋转为-90,0,0。
然后点击左侧capsule并在细节中修改胶囊体大小至合适大小。
1
修改胶囊体碰撞预设为自定义,再修改检测响应使其只响应世界动态和世界静态。
1
1
添加摄像机臂和摄像机,并修改在左侧细节修改摄像机臂旋转为-90,-90,0,修改摄像机的摄像机设置正交(或按喜好不修改)。细节里取消摄像机臂的碰撞测试
最后修改游戏模式蓝图BP_gamemode默认pawn类为玩家蓝图BP_player

测试

在地图中添加玩家出生点组件,设置出生点位置为0,0,0。
点击运行,并根据运行视角中人物的大小修改摄像机的高度或者,正交宽度。

增强输入

增强输入是UE自带的输入系统,我们用它来控制角色的移动。先右键新建一个文件夹,用来存放增强输入文件。
1
右键添加一个输入操作,命名为IA_move,打开IA_move,因为我们做的是俯视角2d游戏,人物只会在x,y轴上移动,所以把值类型改为2d。
1
右键添加输入映射情境,在输入映射情境中,可以给我们的输入操作添加键盘映射,每当我们按下键盘上的某个键时,就意味着我们执行了一次所映射的输出操作。例如我将wasd绑定为IA_move的输入映射情景,则每当我们摁下wasd就相当于我们执行了一次IA_move的输入操作。命名为Mapping_input
1
在输入映射中添加IA_move,并给它添加wasd映射。
1
当输入值大于1个单位时,x轴默认是最先输入的,w,a,s,d默认都会输入x轴,所以a,d不用修改给给w,s添加拌合输入轴值修改器,使其输入的值能传给y轴,在视图中,y轴的正方向向下,x轴的正方向向右,要使w,a输入的值为负方向,则要再给a,w添加否定修改器
1
同时修改w否定只控制y轴,a否定只控制x轴,这样就不会导致冲突。
这里要注意,拌合输入轴值的修改器要在否定修改器之上。

在玩家控制蓝图中添加增强输入

1
打开玩家控制蓝图BP_PlayerController,在蓝图中设置以上连连看。
该步骤是绑定增强输入子系统到输入映射情景,所以要在游戏最开始绑定,于是选择在事件事件开始运行也就是玩家控制器蓝图开始构造、游戏开始前绑定。首先判断控制器自己的增强输入本地玩家子系统是否有效,如果有效,就将输入影杀添加到增强输入系统中。

在在玩家蓝图添加移动输入

1
1
打开玩家蓝图BP_player,在蓝图中设置以上连连看。
EnhancedinputAction lA_move为增强输入IA_move,我们要在该增强输入每次有输入值时使玩家移动,于是使用Triggered引脚,该引脚为只要摁下按键就持续输入,适合玩家移动这种持续动作。该增强输入有一个二维向量值Action value储存了输入的2d向量值x和y,右键Action value分割结构体引脚或者拖出Action value再在搜索栏搜索拆分向量2D(上图),两种方式都能分割2d向量值为两个浮点数。可以将x,y直接输入给移动值,也可以拖拽两个值,将两个浮点数提升为变量保存下来,这样在之后的动画绑定中会更方便。

记得修改游戏模式蓝图中玩家控制器类为建立的玩家控制器蓝图。
如果发现ws都只向下走,在输入映射中修改w的修改器,拌合输入轴值在否定之前。
若角色速度过快或过慢,可以修改角色蓝图中角色移动组件的最大行走速度。

角色动画绑定

1
把你所需要的所有动作序列做好,并作一个简单的归纳。
1
右键新建一个AnimationSource 并命名为Player_AnimationSource,用来保存角色动画资源。
1
Player_AnimationSource里新建两个sequence,一个命名为idle,一个命名为walk
1
两个都勾选上这个选项。
1
跟据自己的需求设置成相应的动画,我只有左右两个动画,如果你有8/4方向角色素材,可以调整N值,再给相应的向量赋值。这里要注意,在Animation Data里的y轴是朝上的,但是在地图视图中y轴是朝下的,如果设置4or8向动画,记得反转。
1
此时我们回头修改一下之前移动输入的部分,右键action value分割向量引脚,将x,y值保存为向量X,Y,这样即便不输入也会保留有上一次X,Y输入的值,我们在停止输入时x,y,也会有值,保存我们上一次的移动的方向,我们的动画在停止时也会继承我们最后一次移动的方向。
1
1
返回主视图,右键建立一个新的玩家动画蓝图PaperZD_AnimBP,并命名为ABP_player
1
在玩家动画蓝图中创建一个变量用来访问玩家蓝图的值。具体步骤为:我们需要在玩家动画蓝图里访问玩家蓝图的内容,常用的方法有两种,一种时用接口,一种是将变量转换为玩家蓝图类型,这里使用的是后者。在事件On init中构建,首先Get Owning Actor,拖拽他的return value并将其类型转换为BP_player(cast to BP_Player),然后拖拽As BP_Player,将其提升为变量
1
点击AnimGraph,将保存的X,Y输入状态机中这里通过As BP_Playerget Xget Y,拖拽Output Animationresult,搜索Set Directionality,分割其向量引脚,再把XY分别输入,最后把Set DirectionalityAnimation连接到一个新的状态机New State Machine,然后点进新的状态机。
1
创建一个animtion state并重命名为idle/walk
1
通过速度是否为0控制动画选择,这里通过Select Animation by Bool来选择动画,当从As BP_Player获取的速度为0时,布尔值为1,播放idle动画,反之播放walk动画。
1
最后在角色蓝图的动画组件中选择我们刚刚创建好的动画蓝图。

结语

1
完成以上所有后,编译并保存项目,然后再引擎视图中运行,就可以看到我们的主角在游戏地图中移动了!
这是我第一次写这种教程,如有错误还请多多指出。
之后我也会继续跟进这个项目,敬请大家关注。 ^ ^