2 - 初见蓝图编辑器

希望我能尽快入门UE5!本章将介绍虚幻引擎蓝图的相关内容,在本篇中我将学到:

  • 蓝图是什么,和C++的区别
  • 蓝图编辑器以及有关基本操作

通过虚幻5官方的“第三人称模板”来学习。

蓝图简介

概念

在UE5中,蓝图这个词可以用来指两种不同的概念:

  • UE5的可视化变成语言;
  • 特定类型的资产,即蓝图类/蓝图资产。

和C++的区别

之前说过,Actor是一个可以放置在关卡中的对象。这个对象可以是C++类的一个实例,也可以是蓝图类的一个实例,两者都必须直接或间接地继承蓝图类。

C++类和蓝图类的区别如下:

  • 如果将编程逻辑添加到C++类中,将获得比创建一个蓝图类更高级的引擎功能。
  • 在蓝图类中,我们可以轻松地查看和编辑该类的可视化组件,例如3D网络或触发框碰撞,以及修改在C++类中定义并公开给编辑器的属性,这使得管理这些属性变得更加容易。
  • 在蓝图类中,可以轻松引入项目中的其他资产;在C++类中也可以,但操作比较麻烦。
  • 运行在蓝图可视化编程上的编程逻辑在性能方面比C++类慢。
  • 在版本管理方面,C++类可以进行多人协同;而蓝图类被解释为二进制文件不是文本,多人协同会发生冲突。

创建蓝图Actor

创建蓝图类的步骤很简单,如下:

  1. 在内容浏览器中的“内容/ThirdPerson/Blueprints”中右键新建一个蓝图类;
  2. 在选取父类中选择要继承的C++类或蓝图类,这里选择继承Actor类;
  3. 给蓝图类起名,这里是”TestActor”。

双击新建的蓝图类,即可进入蓝图编辑器。

蓝图编辑器的界面布局

蓝图编辑器是UE5编辑器中的一个子编辑器,专门用于编辑蓝图类。在这里可以编辑蓝图类或其父类的属性、逻辑,以及它们的可视化外观。

蓝图编辑器的界面如下:

来看看界面布局:

  • 视口:位于正中间,和关卡编辑器中的视口类似,可以可视化Actor并编辑其组件。此外视口其实是选项卡,还有“事件图表”选项卡和“Construction Script”选项卡,待会介绍。
  • 组件:位于左上角,Actor可以有几个Actor组件,在这里可以添加和删除那些组件,或访问它继承的C++类中定义的Actor组件。
  • 我的蓝图:位于左下角,在这里可以浏览、添加和删除蓝图类及其继承的C++类中定义的变量和函数等。需要注意的是,蓝图有一种被称为 事件 的特殊功能,用于表示游戏中发生的事件。这里有三个事件:BeginPlayActorBeginOverlapTIck,待会介绍。
  • 细节:位于右边,和关卡编辑器的细节面板类似,该面板用于显示当前选定的Actor组件、函数、变量、事件或该蓝图类中任何其他单个元素的属性。
  • 工具栏:位于顶部中央,可以编译蓝图类中编写的代码,保存代码,定位代码等。

此外,在右上角可以看到当前蓝图类的父类,点击它可以转到相应的蓝图类/C++类。如果想更改父类,可以在左上角文件中选择重设蓝图父项。

事件图表选项卡

在这个选项卡中,我们可以编写所有的蓝图可视化编程代码,创建变量、函数,以及访问在该父类中声明的其他变量和函数。

在事件图表选项卡内右键单击以访问蓝图的操作菜单,该菜单允许访问可以在“事件图表”选项卡中执行的操作,包括获取&设置变量,调用函数/事件等。

引脚

在蓝图中,脚本的工作方式是通过引脚连接节点,节点包括变量、函数和事件等几种类型,可以通过引脚连接这些节点。引脚有两种类型:

  • 执行引脚:这些引脚决定节点的执行顺序。例如下图,先执行节点1再执行节点2,需要将节点1的输出执行引脚和节点2的输入执行引脚连接。

  • 可变引脚:节点左侧的引脚是输入引脚,作为参数输入;节点右侧的引脚是输出引脚,作为返回值输出。

创建蓝图变量

在蓝图中,变量的工作方式与C++中使用的变量类似。可以创建变量,获取它们的值,或者是设置它们。创建蓝图变量的过程如下:

  1. 在”我的蓝图“面板单击”变量“右侧的加号,然后可以重命名变量,这里是MyVar
  2. 单击工具栏左侧的编译,编译蓝图;
  3. 编译后在”细节“面板上就会出现变量MyVar的属性,可以进行设置它的值;
  4. 在”我的蓝图“-组件中单击该变量,可以在”细节“面板上修改该变量的详细信息。包括 变量命名变量类型默认值

创建好蓝图变量后,就能在蓝图中获取/设置它了。在”我的蓝图“-组件中选中该变量,拖到蓝图编辑器后出现获取和设置两个选项:

  • 获取MyVar:包含变量当前值的节点;
  • 设置MyVar:允许更改变量值的节点。
获取和设置变量

此外,”我的蓝图“-组件的该变量右侧有个眼睛符号,它决定我们能不能从外部关卡编辑器的”细节“中设置它的值。

创建蓝图函数

在蓝图中,函数和事件类似,区别是事件只有一个输出引脚,因为它通常从蓝图类外部被调用。

事件, 没有执行引脚的纯函数调用, 一般函数调用

创建蓝图函数的步骤如下:

  1. 点击”我的蓝图“-函数中的加号;

  2. 命名新函数,这里是MyFunc,然后编译;

  3. 然后就能在”细节“中设置与此函数相关的所有属性了:

    其中最重要的是”输入“和”输出“,这两个属性将指定此函数必须接收并返回的变量,这里输入一个布尔值,然后总是返回false

  4. 别忘了先编译后保存蓝图函数,如果想在编译完成后自动保存,需要在编译右边的三个点中选择仅在成功时保存。

算术节点

蓝图包含更多与变量/函数无关的节点,接下来介绍算术节点,以乘法Multiply为例:

此节点可以输入两个或多个参数,这些参数可以是多种类型(整数、浮点数、向量等,可以通过单击”添加引脚“右侧的加号添加更多参数),并输出所有参数相乘的结果。

BeginPlay和Tick事件

BeginPlay事件:当这个蓝图类的实例被放置在关卡中,关卡开始播放时,或者当这个蓝图类的实例在游戏正在播放时被动态生成,就会调用该事件。可以用来做一些初始化操作。

Tick事件:游戏以一定的帧率运行,此事件将在游戏的每一帧被调用。

Tick事件将使用参数Delta Seconds进行调用,此参数是一个浮点值,表示从上一帧渲染后到当前帧经过的时间。假设有个蓝图类,每次使用Tick事件渲染帧时,它都要朝+Z走一个单位,如果不用Delta Seconds乘以这个单位,就会导致60帧运行游戏的玩家比30帧运行游戏的玩家看到的速度快两倍。

BP_ThirdPersonCharacter 蓝图类

这个蓝图类是代表玩家控制角色的蓝图,可以分析一下里面有什么。

Actor组件是必须存在于Actor内部的实体,可以将Actor的逻辑扩展到几个不同的Actor组件中。在这个蓝图中,可以看到4个可视化的Actor组件:

  • 骨骼网格体组件:显示UE5人体模型;
  • CameraBoom组件:显示玩家的摄像机视角;
  • 箭头组件:可以让开发者看到角色面对的方向,不是在游戏运行时;
  • 胶囊体组件:指定该角色的碰撞范围;

还有其他看不见的组件,它们由C++或蓝图代码组成。

再看看它的”事件图表“,发现什么也没有,这是因为相关逻辑已经在C++中写了。

网格体和材质

网格体

网格体就是3D模型,可以通过网格体组件添加网格体,这些网格体继承自Actor组建类。其中最重要的网格体组件有两类:

  • 静态网格体:适用于没有动画的网格体,如立方体等;
  • 骨骼网格体:适用于具有动画的网格体,例如播放运动动画的人;

材质

材质可以指定网格体的表示方式,例如颜色、纹理,甚至操作顶点等。

设置材质

接下来给Actor设置材质,步骤如下:

  1. 在关卡编辑器的视口中选择一个蓝色立方体对象,在细节面板处可以看到它的材质信息:

  2. 点击材质-元素0右侧的文件夹图标,这将打开内容浏览器中该材质所在的位置。

  3. 双击这个材质资产,进入材质编辑器,然后在右侧细节中找到它的父项M_Solid,再进入材质编辑器:

材质编辑器

材质编辑器的界面如上图,主要有如下部分:

  • 图表:和蓝图编辑器的事件图表类似,材质编辑器的图标也是基于节点的,但没有执行引脚。
  • 控制板:在右侧,可以在其中搜索并添加相关节点到图表中。
  • 视口:在左上角,可以预览材质的结果,并选择不同的图元。
  • 细节:在左下角,该面板展示图表窗口中选择的材质资产或当前节点的详细信息。
  • 工具栏:在编辑器顶部边栏,可以做一些操作。

可以按住数字键,然后在图表空白处按下鼠标左键以快速创建n维向量,最低1维,最高4维。

接下来看看M_Solid节点的一些输入参数:

  • 基础颜色:简单的材质颜色,通常与常量(使用Base Color节点)或纹理样本(使用Texture Sample节点)连接,让材质拥有特定的颜色或映射特定的纹理。

  • Roughness:材质的粗糙度,决定物体反射光线的散射程度。

  • Metallic:材质的金属度,决定物体看起来像金属表面的程度。

  • 高光度:决定物体反射光的程度。

参考资料

  • 《UE5游戏开发完全学习教程-C++篇》