UE5教程-通过一个TopDown案例快速入门虚幻蓝图-1
最后更新时间:
页面浏览: 加载中...
前言
本教程通过一个俯视角游戏案例,让大家在边做游戏的同时,快速了解ue蓝图开发的部分功能。
项目创建
打开虚幻引擎,本教程的引擎版本是5.4.4,不过版本不同影响不大,选择自己喜欢的版本即可。
点击左侧 游戏
然后选择空白项目,接着更改右下角的项目默认设置,参数为 蓝图/桌面/最大/(空)/(空)
,最后设置项目名称,我的项目名为 topdownrouge
,最后选择项目位置,一定要确认保存路径为纯英文,不然会报错,点击创建,等待几秒钟,项目就建立好了。
编辑器界面介绍
编辑器页面这里就不多赘述了,大家想去了解的点击这个链接即可。
新建关卡
进入引擎后,由于我们项目为俯视角肉鸽,我们至少要制作两个地图,一个地图为游戏主界面,一个地图为游戏地图。在创建地图之前,我们先创建一个文件夹用来保存我们的地图。
在内容管理器中右键新建文件夹,命名为 map
。
点击编辑器左上角的 文件/新建关卡/空白关卡
,创建好空白关卡后按ctrl+s保存关卡地图在 map
文件夹中,命名为 Map_01
,同样的操作建立并保存linguistic一个关卡Map_menu
。
修改项目设置
修改默认地图
点击引擎左上角 编辑/项目设置/地图和模式
, 编辑器开始地图
改为Map_01
,游戏默认地图
改为Map_menu
。这样修改之后我们游戏导出之后的界面就会是我们的菜单地图,而我们打开引擎调试的默认地图则是游戏地图。
其他设置
接着我们在项目设置界面上边栏搜索界面搜索 动态模糊
和 抗锯齿方法
,将动态模糊关闭,抗锯齿方法设置成无。
我们的游戏是2d游戏不需要动态模糊,因为是像素游戏,也不需要抗锯齿。
创建蓝图
游戏模式蓝图
蓝图是利用c++封装特性的、已经封装好的代码,是UE5最主要的编程方式,在创建蓝图之前,我们先在目录里创建文件夹 blueprint
用来保存蓝图类。
要创建的第一个蓝图是游戏模式基础蓝图,我们要在这个蓝图里写游戏模式相关的代码。右键 新建蓝图类/游戏模式基础
,命名为BP_gamemode
。
点击引擎左上角项目设置/游戏模式/默认游戏模式
,改为刚刚建立的游戏模式BP_gamemode
。
接着在编辑器右侧世界场景设置/游戏模式重载
,改为刚设置的游戏模式BP_gamemode
。
这样我们游戏模式蓝图就设置好了。
玩家控制器蓝图
要创建的第二个蓝图为玩家控制器蓝图,在这个蓝图里,我们主要写的是玩家移动控制等的代码,同样新建蓝图类/玩家控制器
,命名为BP_PlayerController
。
PaperZD插件
UE本身自带的2d游戏系统较为简陋,但是有一个插件为2d游戏开发提供了完整的动画蓝图和状态机系统,它就是PaperZD,我们要在fab上下载PaperZD
fab和paperZD下载链接及教程,这里我就不多赘述了。
fab下载好PaperZD后,点击左上角编辑/插件/已安装插件
,勾选paperzd即可。
重启引擎后即可使用插件。
素材导入
创建好蓝图之后,我们就可以开始导入素材了,UE5的素材导入方法十分简单,只需要打开你保存素材的文件夹,然后把你需要的素材拖入引擎的目录中就行。
角色素材导入
这节课我们先导入角色的移动部分的动画素材,新建character
文件夹,在里面新建move
文件夹,将你的角色动画的png素材拖进move
文件夹。此时这些素材作为纹理保存在UE中,你会发现他们现在不是很清晰,我们需要更改两个设置。
打开纹理,在左侧的搜索栏中搜索
过滤器
,把过滤器设置为最近
。此时发现图片变清晰了,但是仍然有变色的部分。退出纹理界面,右键纹理
prite操作/应用paper2d纹理设置
。
现在,这个素材就和我们在绘画软件打开的图片一样清晰了。
当我们的素材是一个动作素材、由几张连续的帧动画组成时,我们要把它们分别提取出来。
先重复上面的步骤。
右键
sprite操作/提取sprite
。进入提取sprite窗口后,一般情况下,ue的自动提取功能会框选出精灵,但是只会严格围绕有色像素点,会导致我们提取的内容不规范,这里建议手动提取:将Sprite提取模式设置为网络,然后选择适合你的素材大小的单元宽度和高度进行裁剪,我的素材是32x32的,所以我的裁剪时的大小也是32x32。
按住ctrl选中刚刚裁剪出的,一系列的动作动画,右键创建图像序列。将创建好的序列打开,按需求在细节里调整调整帧数。
我的动画是4帧,所以我选择每秒8帧。
地图素材导入
导入完角色素材,接下来是地图素材,在导入素材之前,我们同样要在map
里创建文件夹tile
用来保存初始素材。
导入你需要的地图素材,同样的方法过滤器设置为最近。退出右键sprite操作/应用paper2d纹理设置。
瓦片地图
2d游戏地图的绘制依靠的是瓦片集,通过创建好的瓦片集作为调色板,在瓦片地图中绘制,绘制好的地图导入map文件即可作为地图背景。
首先,我们点击刚刚预处理好的地图素材,右键创建瓦片集。
打开瓦片集,设置瓦片大小为适合的大小,例如我的素材每一个瓦片是16x16。
退出瓦片集,右键瓦片集创建瓦片贴图,命名为Map_01
。
然后就可以开始绘制瓦片地图了。
瓦片地图的导入
将绘制好的瓦片地图拖进地图的视图里,调整位置为0,0,0,旋转-90,0,0。
此时我们发现地图的亮度很亮,是因为引擎自带曝光,我们需要给它添加一个后期处理体积。
一般情况下后期处理体积只会处理体积范围内的部分,需要我们选定无限范围,然后将后期处理体积移到不影响我的操作的位置,调整曝光,将最大曝光和最小曝光设置为一,并按照你的需求调整曝光补偿。
地图碰撞体积
地图碰撞体积添加的方式有很多种,这次我们使用的方法是直接创建碰撞体actor,并将其放在地图下方,以达到给地图添加碰撞体积的效果,
打开actor放置面板
,并在搜索栏搜索block
,将阻挡体积拖进视图。
通过顶部视图调整瓦片地图位置和碰撞体大小使碰撞和地图对齐,也可以略大。
再调到前视角,利用调整画刷
和变换
中的数值使碰撞和地图对齐。
PaperZD蓝图
完成这些前期准备后,我们可以开始制作角色的动作蓝图部分了。
首先,在蓝图文件夹里添加paperzd蓝图,命名为BP_player
。我们主要通过该蓝图控制角色的动作行为。
打开蓝图,点击左侧sprite
,在细节里找到精灵/源图像序列视图
,选择刚刚制作的动作序列,这样我们就能在视图里预览了。修改sprite的旋转为-90,0,0。
然后点击左侧capsule
并在细节中修改胶囊体大小至合适大小。
修改胶囊体碰撞预设
为自定义,再修改检测响应
使其只响应世界动态和世界静态。
添加摄像机臂和摄像机,并修改在左侧细节修改摄像机臂旋转为-90,-90,0,修改摄像机的摄像机设置
为正交
(或按喜好不修改)。细节里取消摄像机臂的碰撞测试
。
最后修改游戏模式蓝图BP_gamemode
中默认pawn类
为玩家蓝图BP_player
。
测试
在地图中添加玩家出生点
组件,设置出生点位置为0,0,0。
点击运行,并根据运行视角中人物的大小修改摄像机的高度或者,正交宽度。
增强输入
增强输入是UE自带的输入系统,我们用它来控制角色的移动。先右键新建一个文件夹,用来存放增强输入文件。
右键添加一个输入操作
,命名为IA_move
,打开IA_move
,因为我们做的是俯视角2d游戏,人物只会在x,y轴上移动,所以把值类型改为2d。
右键添加输入映射情境
,在输入映射情境中,可以给我们的输入操作添加键盘映射,每当我们按下键盘上的某个键时,就意味着我们执行了一次所映射的输出操作。例如我将wasd
绑定为IA_move
的输入映射情景,则每当我们摁下wasd
就相当于我们执行了一次IA_move
的输入操作。命名为Mapping_input
。
在输入映射中添加IA_move
,并给它添加wasd
映射。
当输入值大于1个单位时,x轴默认是最先输入的,w,a,s,d默认都会输入x轴,所以a,d不用修改给给w,s添加拌合输入轴值修改器
,使其输入的值能传给y轴,在视图中,y轴的正方向向下,x轴的正方向向右,要使w,a输入的值为负方向,则要再给a,w添加否定修改器
。
同时修改w否定只控制y轴,a否定只控制x轴,这样就不会导致冲突。
这里要注意,拌合输入轴值的修改器要在否定修改器之上。
在玩家控制蓝图中添加增强输入
打开玩家控制蓝图BP_PlayerController
,在蓝图中设置以上连连看。
该步骤是绑定增强输入子系统到输入映射情景,所以要在游戏最开始绑定,于是选择在事件事件开始运行
也就是玩家控制器蓝图开始构造、游戏开始前绑定。首先判断控制器自己的增强输入本地玩家子系统
是否有效,如果有效,就将输入影杀添加到增强输入系统中。
在在玩家蓝图添加移动输入
打开玩家蓝图BP_player
,在蓝图中设置以上连连看。EnhancedinputAction lA_move
为增强输入IA_move,我们要在该增强输入每次有输入值时使玩家移动,于是使用Triggered
引脚,该引脚为只要摁下按键就持续输入,适合玩家移动这种持续动作。该增强输入有一个二维向量值Action value
储存了输入的2d向量值x和y,右键Action value
后分割结构体引脚
或者拖出Action value
再在搜索栏搜索拆分向量2D
(上图),两种方式都能分割2d向量值为两个浮点数。可以将x,y直接输入给移动值,也可以拖拽两个值,将两个浮点数提升为变量保存下来,这样在之后的动画绑定中会更方便。
记得修改游戏模式蓝图中玩家控制器类为建立的玩家控制器蓝图。
如果发现ws都只向下走,在输入映射中修改w的修改器,拌合输入轴值在否定之前。
若角色速度过快或过慢,可以修改角色蓝图中角色移动组件的最大行走速度。
角色动画绑定
把你所需要的所有动作序列做好,并作一个简单的归纳。
右键新建一个AnimationSource
并命名为Player_AnimationSource
,用来保存角色动画资源。
在Player_AnimationSource
里新建两个sequence,一个命名为idle
,一个命名为walk
。
两个都勾选上这个选项。
跟据自己的需求设置成相应的动画,我只有左右两个动画,如果你有8/4方向角色素材,可以调整N
值,再给相应的向量赋值。这里要注意,在Animation Data
里的y轴是朝上的,但是在地图视图中y轴是朝下的,如果设置4or8向动画,记得反转。
此时我们回头修改一下之前移动输入的部分,右键action value分割向量引脚,将x,y值保存为向量X,Y,这样即便不输入也会保留有上一次X,Y输入的值,我们在停止输入时x,y,也会有值,保存我们上一次的移动的方向,我们的动画在停止时也会继承我们最后一次移动的方向。
返回主视图,右键建立一个新的玩家动画蓝图PaperZD_AnimBP
,并命名为ABP_player
。
在玩家动画蓝图中创建一个变量用来访问玩家蓝图的值。具体步骤为:我们需要在玩家动画蓝图里访问玩家蓝图的内容,常用的方法有两种,一种时用接口,一种是将变量转换为玩家蓝图类型,这里使用的是后者。在事件On init中构建,首先Get Owning Actor
,拖拽他的return value
并将其类型转换为BP_player
(cast to BP_Player
),然后拖拽As BP_Player
,将其提升为变量
。
点击AnimGraph,将保存的X,Y输入状态机中这里通过As BP_Player
来get X
、get Y
,拖拽Output Animation
的result
,搜索Set Directionality
,分割其向量引脚,再把X
,Y
分别输入,最后把Set Directionality
的Animation
连接到一个新的状态机New State Machine
,然后点进新的状态机。
创建一个animtion state并重命名为idle/walk
。
通过速度是否为0控制动画选择,这里通过Select Animation by Bool
来选择动画,当从As BP_Player
获取的速度为0时,布尔值为1,播放idle
动画,反之播放walk
动画。
最后在角色蓝图的动画组件中选择我们刚刚创建好的动画蓝图。
结语
完成以上所有后,编译并保存项目,然后再引擎视图中运行,就可以看到我们的主角在游戏地图中移动了!
这是我第一次写这种教程,如有错误还请多多指出。
之后我也会继续跟进这个项目,敬请大家关注。 ^ ^