蓝图总览

虚幻引擎中的 蓝图 - 可视化脚本系统 是一个完整的游戏脚本系统, 其理念是,在虚幻编辑器中,使用基于节点的界面创建游戏可玩性元素。 和其他一些常见的脚本语言一样,蓝图的用法也是通过定义在引擎中的面向对象的类或者对象。 在使用虚幻 4 的过程中,常常会遇到在蓝图中定义的对象,并且这类对象常常也会被直接称为“蓝图(Blueprint)”。

该系统非常灵活且非常强大,因为它为设计人员提供了一般仅供程序员使用的所有概念及工具。 另外,在虚幻引擎的 C++ 实现上也为程序员提供用于蓝图功能的语法标记, 通过这些标记,程序员能够很方便的创建一个基础系统,并交给策划进一步在蓝图中对这样的系统进行扩展。

这是否意味着蓝图就是虚幻脚本的替代品?答案既肯定又否定。之前利用虚幻脚本进行的游戏性编程和其他操作 仍然可以通过 C++ 代码进行处理。同时,蓝图并非刻意为替代 虚幻脚本而生,但它们的许多用途确实和虚幻脚本相同,例如:

  • 延展类

  • 保存并编辑默认属性

  • 为类管理子对象(如组件)实例化

期望达到的结果是:游戏性程序员构建基础类,基础类公开一套有用的函数和属性; 这些基础类形成的蓝图可使用这些函数和属性并进行延展。

下表对虚幻脚本(出自虚幻引擎 3)、C++、蓝图中诸多要素处理方法进行比较, 帮助旧版虚幻引擎用户过渡到新版,并对本地代码 和蓝图进行比较。

虚幻脚本(UE3) 蓝图(UE4 C++(UE4
.uc file 蓝图资源 .h/.cpp files
UClass UBlueprintGeneratedClass UClass
延展 [ClassName] ParentClass :[ClassName]
变量 变量 UProperty()
函数 图表/事件 UFunction()
defaultproperties{} 默认类 native constructor
默认组件 组件列表 native constructor

如需了解蓝图高阶指导内容,请查阅 蓝图简介

蓝图类型

蓝图有数种类型,每种均有其独特用法,如创建新类型编写关卡事件脚本, 或定义其他蓝图使用的接口和宏。

蓝图

Blueprint Class(蓝图类), 一般缩写为 Blueprint(蓝图),是一种允许内容创建者轻松地基于现有游戏性类添加功能的资源。 蓝图 是在虚幻编辑器中可视化地创建的,不需要书写代码,会被作为类保存在内容包中。 实际上,这些类蓝图定义了一种新类别或类型的Actor,这些Actor可以作为实例放置到地图中, 就和其他类型的Actor的行为一样。

纯数据蓝图

Data-Only Blueprint(仅包含数据的蓝图 是指仅包含代码(以节点图表的形式)、变量及从其 父类 继承的组件
的类蓝图。仅包含数据的蓝图允许您调整及修改继承的属性,但是不能添加新元素。 从本质上讲,这些蓝图是原型的替代物,设计人员可以使用它们来调整属性或者设置具有变种的项目。

Data-Only Blueprints(仅包含数据的蓝图) 是在合并的属性编辑器中进行编辑的,但是也可以通过使用完整的 蓝图编辑器 来添加代码、 变量或组件,来将其转换为完整的 蓝图

关卡蓝图

关卡蓝图 是一种特殊类型的 蓝图 ,是作用于整个关卡的全局事件图表。 关卡事件或者关卡中的Actor的特定实例,用于 激活以函数调用或者流程控制操作的形式呈现的动作序列。 熟悉虚幻引擎3的人应该非常熟悉这个概念,因为这和虚幻引擎3中的 Kismet的工作原理非常类似。

关卡蓝图 提供了针对关卡动态载入、 Matinee 以及给放置到关卡中的 Actor绑定事件的控制机制。

蓝图接口

Blueprint Interface(蓝图接口) 是一个函数或多个函数的集合,仅有函数名称,没有函数实现,该接口可以添加到 其他 蓝图 中。任何具有该 接口蓝图 ,都一定会具备这些函数。在每个添加了接口的蓝图中,都可以 提供 接口 的这些函数的功能。从本质上讲,这和一般编程中的 接口的概念一样,允许通过一个公共接口来共享及访问 多种不同类型的对象。简单地讲, Blueprint Interfaces(蓝图接口) 允许不同的 Blueprints(蓝图) 间彼此共享及发送数据。

蓝图接口 的创建和其他蓝图类似,可以通过编辑器中的内容创建器进行创建, 但它们有一些局限性,因为它们不能:

  • 添加新变量

  • 编辑图表

  • 添加 组件

蓝图宏库

Blueprint Macro Library(蓝图宏库) 是一个存放了一组 的容器,或者是可以像节点那样 放置到其他 蓝图 中的自包含图表。这些蓝图宏库非常节约时间,因为它们存放了常用的节点序列、 及针对执行和数据变换的输入和输出。

会在所有引用它们的图表间共享,但是如果它们在编译过程中是合并的节点,那么它们会自动地 展开为图表。这意味着 蓝图宏库 不需要进行编译, 但是对 所做的修改,仅当重新编译了包含引用该 的图表的蓝图时,这些修改才会反应在 图表中。

蓝图工具

蓝图工具 又名 Blutility,是用于执行编辑器行为或延展编辑器功能的 纯编辑蓝图。它们可将不带参数的 事件(Events) 作为 UI 按键公开, 并能执行对 蓝图 公开的任意函数、对视口中当前选定的 Actor 集产生作用。

蓝图剖析

蓝图功能由诸多元素定义。部分元素默认存在, 其余可按需添加。这些元素可用于定义组件、执行 初始化和设置操作、对事件作出响应、组织并模块化操作、定义属性 等。

组件窗口

Components(组件) 面板允许组件一创建就添加到 蓝图 上。这提供了一种方法,使得可以通过 CapsuleComponentsBoxComponentsSphereComponents 来添加 碰撞几何体, 可以通过 StaticMeshComponentsSkeletalMeshComponents 的形式添加渲染几何体, 通过使用 MovementComponents 控制运动等。您还可以将添加到 Components(组件) 列表中的组件, 分配给这个蓝图或其他 蓝图 中用于访问这些组件的实例变量。

构建脚本

当创建 蓝图 时, Construction Script(构造脚本)Components(组件) 列表 之后运行。构造脚本包含一个节点图表,执行该图表使得该 类蓝图 实例执行初始化操作。 这个功能非常强大,因为像在世界中执行追踪、设置网格物体及材质等这样的动作可以用于 实现情境关联的设置。比如,一个光源的 蓝图 可以决定它所放置到的地面的类型, 且可以从一组网格物体中选择要使用的正确的网格物体;或者一个篱笆 蓝图 ,它可以在各个方向上 进行追踪,来决定篱笆需要有多长才能跨越那个距离。

事件图表

蓝图中的 EventGraph(事件图表) 包含一个节点图表,该图表使用事件和函数调用来执行动作, 以便对和该蓝图相关的游戏事件做出反应。 事件图表通常用于给蓝图的所有实例添加功能。 这里也是设置交互性和动态反应的地方。 比如,一个光照蓝图可以通过关闭其 LightComponent 及改变其网格物体使用的材质来对于伤害事件做出反应。 这将会自动地为该光照蓝图的所有实例提供这种行为。

函数

Functions(函数) 是属于特定 蓝图 的节点图表,该节点图表可以执行或者从 蓝图 中的另一个 图表中进行调用。函数具有一个单一的入口点,由和该函数具有相同名称的一个节点指定, 该节点包含了一个单一的执行输出引脚。当从另一个图表调用函数时,会激活该输出执行引脚, 促使执行连接网络。

变量

Variables(变量) 是存放一个值或引用世界中的一个Object或Actor的属性。这些用户界面 内部访问,或者通过设置使得可以在外部进行访问, 以便应用放置在关卡中的蓝图实例的设计人员可以修改它们的 值。