UE5——创建你的第一个游戏

一、引言

对于刚接触UE的人来说,如何从0—>1创建出一个自己的小游戏,UE5官方提供了一个很棒的案例,如下
《Your First Game In Unreal Engine 5》视频原文
需要准备的材料有:
1、UE5引擎
2、Stack O Bot 提供的资源
3、耐心的看完这篇文章(浓缩了整个视频的精华)

二、游戏展示

请添加图片描述

三、整体大纲

1、创建工程
2、创建游戏中的第一个资产(一个小盒子)
3、创建地形(地形工具,切换到地形模式)
4、创建地形中的植被(草、石头)并刷到场景中
5、创建游戏的控制器包括(游戏模式、玩家控制器、玩家的pawn)
6、给角色添加动画蓝图以控制角色动作
7、创建场景中的NPC即AI(AIController+NavMeshBoundsVolume组件)
8、角色添加可以“下蛋”到脚底的功能,并给AI添加寻路至蛋的位置
9、丰富场景中的交互(按钮+门)
10、给场景内的角色移动增加扬尘效果(特效)
11、给角色行走添加声音
12、在门开启的时候给相机添加抖动
13、游戏打包

四、内部实现

1、创建工程

在这里插入图片描述
请添加图片描述
打开光照混合器,并将下面包括“创建天空光照”在内的几种光照都加入到环境中
请添加图片描述
经过上述操作,场景中就从一片黑暗变得丰富多彩了
Tips:
Ctrl + l:旋转书标可以改变太阳光(直射光)的直射方向
Ctrl + space:可以呼出资产面板(非常爽)

2、创建游戏中的第一个资产(一个小盒子)

在这里插入图片描述
将上述资源及对应的图片资源导入UE5中,有如下几种资源
请添加图片描述
接下去分别对“M_Metal”、“M_Carbon”、“M_Plastic”进行材质赋予
请添加图片描述
上面这种,是最基础的,即将一种颜色赋值给一种材质
请添加图片描述
上图是将一张贴图赋予材质的表面作为基础色,并将存有法线信息的图(法线图)设置到该材质的表面使其产生凹凸感,texcoord将两张图进行平铺即扩展使纹理更细密,下面两张图也是大同小异,不在介绍
请添加图片描述
请添加图片描述

如果对渲染不了解的可以不去研究material的连线什么含义,直接全部采用第一张的最简方式也可以
请添加图片描述
经过上述几种材质的加持,盒子便带有塑料、布料、金属等特质

3、创建地形(地形工具,切换到地形模式)

UE5自带了地形工具,如下进行切换
请添加图片描述
之后对地形进行创建,设定好需要的尺寸后点击创建
请添加图片描述
如果看不到创建出来的地形,设置一下场景中的显示,勾选上地形
请添加图片描述
创建一个材质并赋予其材质,如下的“My_LandScape_M”,并创建两个层分别是"Grass"、“Sand”
请添加图片描述
请添加图片描述接着创建层信息,如下
请添加图片描述
请添加图片描述
至此我们可以通过笔刷对场地进行绘制,如下,场景可见两种颜色
请添加图片描述
接下来我们对两种环境"沙漠"、"草地"进行装饰,只需要将地形的材质进行扩展即可,原理同其他材质一般
请添加图片描述
请添加图片描述
此时能够看到沙漠和草地均出现了纹理

4、创建地形中的植被(草、石头)并刷到场景中

只有颜色和纹理的地形终究还是缺了点立体感,因此我们要在场景中加入各种植被,如草、石头、花、树

1、草地

创建如下植物
请添加图片描述
设置上述创建的植物的草地网格体为我们导入的草,其他诸如草地密度等参数可以自行调整
请添加图片描述
接着设置草的material,要注意的是要将草的混合模式设置为"已遮罩"
请添加图片描述
其中要注意上图右下角的两个节点,分别是左边"LandscapeLaerSample",右边是"LandscapeGrassOutput",通过设置这两个节点,可以在地形为Grass自动生成草,最后我们将一开始创建的"地形草地类型"设置到"LandscapeGrassOutput"中,草地即可自动生成
请添加图片描述
在这里插入图片描述

2、其他植被

相比起草地,其他类型的植被需要我们手动去刷,而不是自动生成,首先我们需要将植被创建出来

对于网格体面数比较多的植被,需要勾选编译Nanite,否则会出现植被制作完之后加载不出来的情况,Nanite技术在Matt虚幻引擎4->5的转化视频中、Chris Murphy在教程中会介绍
请添加图片描述
创建植物
请添加图片描述
同草一样将网格体设置给该植物
请添加图片描述
需要注意的是,岩石的体积较大,不像草一样能够不添加碰撞体,因此我们需要设置岩石的碰撞为"BlockAll"
请添加图片描述

下图为该岩石的material,不展开介绍
请添加图片描述
最后将岩石添加到植被中,如下
请添加图片描述
之后就可以笔刷刷岩石了
请添加图片描述
其他植物的创建同上,最终呈现的效果如下
请添加图片描述

5、创建游戏的控制器包括(游戏模式、玩家控制器、pawn)

1、游戏模式

GameMode定义了我们当前的游戏。它规定了游戏规则、评分、允许哪些actors在游戏中存在,以及谁可以进入游戏。
请添加图片描述
创建好GameMode之后,需要将GameMode中的**“玩家控制类”、“默认pawn类”**,并且到项目设置中将我们创建的GameMode设置上去,如图二
请添加图片描述
请添加图片描述

2、玩家控制器

PlayerController作为游戏中角色和玩家之间接口,本质上代表了玩家的意志,通常情况下,我们会将角色的所有输入定义在PlayerController里面,特别是对于一些复杂的情况,例如多玩家游戏或者游戏运行中动态更改角色的游戏,在这些游戏中由PlayerController对角色发出指令。

另外在某些情况下,将输入定义在PlayerController是必须的,例如超级马里奥这种角色可能会死亡并重生,重生之后会得到一个新的角色,导致存储在角色上的数据会被重置。但是PlayerController是在整个游戏中持续存在的,比如马里奥中的金币,因为存在PlayerController中,因此不会被重置。
请添加图片描述
这里没有将玩家的控制放在Controller中,转而放到了Pawn中,不过也不影响游戏的运行,因为这是一个单人单机游戏

3、Pawn

Pawn是Actor的子类,它可以充当游戏中的化身或人物(例如游戏中的角色)
请添加图片描述
我们会在"MyCharacter"中赋予角色移动及转向功能,这几个输入功能几乎是和整个游戏直接绑定的(不会随着游戏状态的变化而发生变化,例如W由前向行走变成释放技能),因此我们直接在输入设置中配置如下图
请添加图片描述
接着赋予这几个输入事件以功能,如下图
请添加图片描述

6、给角色添加动画蓝图以控制角色动作

使用UE自带的动画蓝图实现

1、导入角色对应网格体、骨骼、动画序列

角色材质的设置如下:
请添加图片描述
请添加图片描述

2、创建动画蓝图,并回到角色中将"动画模式"变更为使用动画蓝图,"动画类"变更为刚刚创建的动画蓝图,如图二

请添加图片描述
请添加图片描述

3、使用状态机对动画进行控制,分别是Idel、Walk、Run之间的转变

1、创建状态机节点并连接

请添加图片描述

2、在状态机中设置转化条件及对应动作

总图
请添加图片描述
Idel节点
请添加图片描述
Idel To Walk条件
请添加图片描述
Walk To Idel条件
请添加图片描述

Walk/Run节点在4中单独讲述

4、Walk/Run

这里我们将Walk/Run设置为同一个状态,通过角色身上的速度值来改变角色动画:
需要先获取角色速度,如下,在蓝图的事件图表中定义Speed,并对其进行赋值
请添加图片描述
创建混合动画,并暴露混合动画的控制变量Speed,如图二中**"水平坐标"的设置**
请添加图片描述
请添加图片描述
设置Walk/Run节点
请添加图片描述

7、创建场景中的NPC即AI(AIController+NavMeshBoundsVolume组件)

创建AIController;将AIController设置给场景中NPC;在场景中添加寻路检测NacMeshBoundsVolume;编写AIController蓝图,NPC得以获得目标
请添加图片描述请添加图片描述
请添加图片描述
请添加图片描述
AIController的逻辑会在8中给出
Tips:P可以切换NavMeshBoundsVolume组件的可见性

8、角色添加可以“下蛋”到脚底的功能,并给AI添加寻路至蛋的位置

创建“蛋”的蓝图(继承自Actor);在PlayerController中创建“下蛋”逻辑;在AIController中创建“寻蛋”逻辑(包含FindBall函数的实现+NPC找到蛋后的逻辑);在“蛋”蓝图中实现重叠销毁自身逻辑
上述实现分别对应下面5图
请添加图片描述请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

9、丰富场景中的交互(按钮+门)

1、使用重叠检测实现按钮的开关功能

当按钮与其他物体重叠时,对按键执行一个向下移动模拟按下同时触发“碰撞检测组件”的碰撞开始事件(详看下面);结束重叠时反之
请添加图片描述
timeline节点的设置如下
请添加图片描述

2、创建碰撞检测组件用于监测按钮的按下和弹起

碰撞检测组件继承自ActorComponent,可以挂接到任意Actor上,组件承担事件分发的功能
请添加图片描述

3、根据碰撞检测组件的触发事件开关门

定义“OpenDoor”、“CloseDoor”事件,并且检测按钮对象身上的碰撞检测组件,如果碰撞了就执行“OpenDoor”;反之执行“CloseDoor”
注意左下角的Trigger需要对其开放(眼睛张开),方可在场景中指定其对象
请添加图片描述
timeline节点的设置如下
请添加图片描述
最后我们需要将场景中的门指定其Trigger(对应的按钮拖入)
请添加图片描述

10、给场景内的角色移动增加扬尘效果(特效)

创建Dust特效;将其挂载在动画对应的帧上
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

11、给角色行走添加声音

与挂接特效一样,只是创建的对象变成了音效
请添加图片描述
请添加图片描述
请添加图片描述

12、在门开启的时候给相机添加抖动

UE自带了相机抖动的基类,直接使用即可,创建完后只需要在门开关状态发生变化后播放相机抖动即可(如本章最后一图)
请添加图片描述
请添加图片描述
请添加图片描述

13、游戏打包

请添加图片描述
如若出现上图诸如Android等左侧的警示符,只需更新/下载对应的SDK即可(Visual Studio内找)

猜你喜欢

转载自blog.csdn.net/weixin_40301728/article/details/129677565