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

Posted 在逆境中蜕变

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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内找)

最简单的 UE 4 C++ 教程 —— 隐藏并禁用游戏中的 Actor

【原教程是基于 UE 4.18,我是基于 UE 4.25】

英文原地址

接上一节,要在游戏中完全隐藏角色,你必须做三件事。

  • 你必须禁用它的碰撞,
  • 禁用它的滴答声,
  • 并将其隐藏在游戏中。

您可以将代码添加到任何 actor 子类实例上。对于本例,我创建了一个单独的 actor 来演示它的用途。

创建一个名为 HideActor 的 actor。在头文件中我创建了两个:通过 bool HideInGame 来跟踪,如果我们想禁用 actor 的话,并在 void DisableActor 运行所有我们需要禁用的元素。我们将这两个变量放在 Disable 类别中,以使它们与 actor 的其他属性区分开

HideActor.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "HideActor.generated.h"

UCLASS()
class UNREALCPP_API AHideActor : public AActor
{
	GENERATED_BODY()

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere, Category = "Disable")
	bool HideInGame;

	UFUNCTION(BlueprintCallable, Category = "Disable")
	void DisableActor(bool toHide);
	
};

BeginPlay() 中,我们检查 HideInGame 是否为真。如果为真,则运行 DisableActor() DisableActor() 隐藏actor,禁用它的冲突,并禁用它运行每一帧。

HideActor.cpp

#include "HideActor.h"

// Called when the game starts or when spawned
void AHideActor::BeginPlay()
{
	Super::BeginPlay();

	if (HideInGame)
	{ 
		DisableActor(HideInGame); 
	}
	
}

// Called every frame
void AHideActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
}

void AHideActor::DisableActor(bool toHide) 
{
	// Hides visible components
	SetActorHiddenInGame(toHide);

	// Disables collision components
	SetActorEnableCollision(false);

	// Stops the Actor from ticking
	SetActorTickEnabled(false);
}

效果演示

为了方便演示,为 actor 添加了 cube 组件

 

当 Hide In Game 为 false 时运行游戏

 

当 Hide In Game 为 true 时运行游戏

 

以上是关于UE5——创建你的第一个游戏的主要内容,如果未能解决你的问题,请参考以下文章

ue5怎么添加第三人称角色

UE4/UE5引擎 FPS游戏逆向工程

UE5快速入门教程

UE5 材质 Flipbook火焰特效

UE4UE5模型鼠标点击选中边缘高亮(附UE5工程)

虚幻5引擎来了 虚拟现实傻傻分不清?