虚幻引擎中的蓝图可视化脚本系统(通常简称为“蓝图”)是一种可视化脚本语言,它使用基于节点的界面来创建游戏玩法功能,而无需编写代码。 蓝图系统类似于编写脚本语言,使用类型化数据,如数字、布尔值、数组和结构体。 逻辑会通过执行线流动,这意味着每个节点仅在有明确指令时才会运行。
通过蓝图类,你可以将物理组件与脚本行为配对。 例如,蓝图可以包含金币静态网格体和行为,使玩家在触摸金币时拾取。
就像许多常用的脚本语言,你可以使用该系统在引擎中定义面向对象的类或对象。 对于程序员而言,虚幻引擎的C++实现包括蓝图特有的标记,以便你可以创建设计师可以扩展的基线系统。
在本概述中,你将了解不同类型的蓝图资产,并探索一个蓝图类示例,你将修改该蓝图的某些元素,并了解这些更改如何影响关卡编辑器和游戏玩法中的蓝图Actor。
蓝图类型
蓝图资产有多种类型,每种类型都有其独特的作用。 当你创建和保存蓝图时,它会成为内容包中的资产文件。
蓝图类
蓝图类,通常简称为蓝图,是一种允许内容创建者轻松基于现有游戏玩法类添加功能的资产。 _蓝图_ 是在虚幻编辑器中可视化地创建的,不需要书写代码,会被作为类保存在内容包中。 实际上,这些类蓝图定义了一种新类别或类型的Actor,这些Actor可以作为实例放置到地图中,就和其他类型的Actor的行为一样。
蓝图类就像一个配方,使用组件、变量和蓝图可视化脚本来描述游戏中对象的属性和行为。 你将蓝图类的实例添加到你的关卡中。
这是你最常使用的类型,即蓝图类,通常简称为蓝图。
蓝图类在不包含执行逻辑且仅重载从父蓝图继承的变量或组件时,可以为纯数据类型。纯数据蓝图类会在紧凑编辑器中打开,但如果你添加新的逻辑、图表或其他脚本元素,它们就会转换为完整的蓝图编辑器。
如需了解详情,请参阅 类蓝图 文档。
关卡蓝图
每个关卡都有一个关卡蓝图。 创建新关卡时,虚幻引擎会自动为该关卡创建一个关卡蓝图。 这种蓝图充当关卡范围的全局事件图表。
关卡蓝图还提供了关卡流送和Sequencer过场动画的控制机制,以及将事件绑定到关卡内Actor的控制机制。
要打开关卡的关卡蓝图,请使用关卡编辑器主工具栏中的蓝图菜单。
有关其他文档,请参阅关卡蓝图。
蓝图接口
蓝图接口资产是一个或多个函数的集合——只有名称,没有实现——可以添加到其他蓝图中。 任何添加了该接口的蓝图都保证拥有这些函数。 接口的函数可以在添加它的每个蓝图中提供功能。 在本质上,这类似于一般编程中的接口概念,它允许多个不同类型的对象通过一个公共接口共享和被访问。 简单来说,蓝图接口允许不同的蓝图相互共享和发送数据。
蓝图接口不能:
添加新变量
编辑图表
添加组件
如需了解详情,请参阅 蓝图接口 和 接口快速入门指南 文档。
蓝图库
你可以通过在"库"资产中创建函数和宏来复用逻辑,以便项目中的所有蓝图都能访问它们。
蓝图函数库
蓝图函数库是一种蓝图资产,用于存储可复用函数的集合。 这些函数不与特定的蓝图或Actor相关联。 相反,它们可以在整个项目中全局访问,并且可以从任何蓝图类中调用。 函数库能将实用函数集中管理,避免在多个蓝图间反复复制粘贴同一段节点。
蓝图函数库中的函数是静态的,这意味着它们在调用之间不存储或记住信息,并且它们不知道特定蓝图实例的信息,除非你将该数据作为参数传入。 因此,函数库最适合对输入进行操作并返回结果的通用逻辑。 当功能依赖于对象的内部变量(如玩家的物品栏)时,通常应将其放在该对象的蓝图中,而不是库中。
蓝图宏库
蓝图宏库是一个容器,包含一组宏或自包含的图表,这些图表可以作为节点放置在其他蓝图中。 它们会保存常用的节点序列(包括执行和数据传输的输入和输出),因此可有效节约时间。
宏在引用它们的所有图表之间共享,但它们会在编译时自动扩展到图表中,就像折叠节点一样。 这意味着蓝图宏库不需要编译。 但是,对宏的更改仅反映在重新编译包含这些图表的蓝图时引用该宏的图表中。
函数是可重复使用的逻辑块,它们接受输入,运行一次,并且可以返回结果。 它们非常适合计算或检查。宏是可重复使用的图表布局,可直接扩展到使用宏的蓝图中。 它们可以有多个执行输出,可用于可视化流的控制。
蓝图工具
蓝图工具(或编辑器工具)是一个仅限编辑器的蓝图,可用于执行编辑器操作或扩展编辑器功能。 这些事件可以作为UI中的按钮公开,且不带参数,并能够执行对蓝图公开的任何函数,同时对视口中当前选定的Actor集产生作用。
探索蓝图类
开始之前,你需要一个基于第一人称或第三人称模板(任意变体)的虚幻编辑器项目。
如需在虚幻引擎中创建新项目的帮助,请参阅 创建首个虚幻项目
打开现有蓝图
你使用模板创建了项目,因此项目中已经包含多个蓝图,你可以探索和使用它们。 其中一个蓝图类示例是一个跳跃板,它具有将玩家向上弹起的功能。 你可以在关卡中的任意位置添加该蓝图的实例。
要打开跳跃板蓝图,请按照以下步骤操作:
在虚幻引擎中,点击屏幕左下角的内容侧滑菜单按钮。 或者,你可以按住CTRL键并按空格键。
导航到Content > LevelPrototyping > Interactable > JumpPad文件夹。
你将看到一个
BP_JumpPad资产,这是一个蓝图类。 双击资产,在蓝图编辑器中打开它。默认情况下,蓝图会在新窗口中打开。 你可以将带有资产名称的选项卡拖动到主编辑器中关卡选项卡旁边,从而停靠一个窗口。
在蓝图编辑器中,你可以定义组件、执行配置操作、响应事件、组织和模块化操作、定义属性等。 你添加到蓝图中的视觉效果和功能适用于游戏中该蓝图的所有实例。
我们来看一下BP_JumpPad。 在窗口顶部,你可以看到三个选项卡:视口、事件图表和构造脚本。
使用组件构建关卡对象
点击视口选项卡。 与在主关卡编辑器中使用视口类似,你可以使用蓝图的视口查看和编辑蓝图。
在此选项卡中,你将看到跳跃板的视觉呈现,包括一个平台、一个光源和一个粒子效果。
在窗口的左侧,你还会看到蓝图的组件,即定义蓝图构成和关卡中显示内容的各个部分。 使用组件面板添加、移除和重新组织蓝图的组件。
你可以使用组件添加到蓝图的构建块包括:
包含胶囊体碰撞、盒体碰撞或球体碰撞组件的碰撞几何体。
以静态网格体组件或骨骼网格体组件形式渲染的几何体。
包含移动组件的移动控制。
你可以创建仅包含组件而不包含脚本行为的蓝图,充当可重复使用的关卡对象,可以在一个地方进行编辑。
你还可以在事件图表中引用蓝图的组件或其属性,以便在运行时对这些组件执行操作。
让我们仔细看看作为 BP_JumpPad一部分的组件:
BP_JumpPad具有一个点光源组件。 点击组件列表或视口中的点光源对象。 你可以使用变换工具移动和旋转此光源。
在蓝图编辑器的右侧,你将看到细节面板,其中列出了与所选组件相关的属性。 你可以编辑此光源的强度、光源颜色等。
创建蓝图功能
在视口选项卡旁边,你可以看到事件图表和构造脚本选项卡。 如果你在蓝图中创建任何函数,这些函数图表的选项卡也会出现在这里。
图表包含蓝图的设计时行为和游戏时行为及功能。 你将在这里创建逻辑,告诉蓝图的组件如何运行。
逻辑指蓝图的节点和连接。
构造脚本
当蓝图角色在关卡中生成时,无论是在关卡编辑器视口中还是在游戏过程中,虚幻引擎都会先构建其组件,然后执行其构造脚本。 当你变换或更改Actor的属性时,它也会在编辑器中执行,因此你可以在视口中立即看到结果。 它用于执行初始化操作,为游戏进程设置蓝图Actor。 这些初始化操作可以是上下文相关的;例如,根据对象所处的地面类型为其应用不同的材质。
如果单击BP_JumpPad的构造脚本选项卡,则会看到一个Construction Script节点,该节点执行一系列操作,设置跳跃板在关卡中首次出现(或生成)时的颜色和其他属性。
蓝图图表导航操作:
平移(Pan):按住鼠标右键并拖动。
缩放(Zoom):滚动鼠标滚轮。
框选:按F键将视图中心对准所选节点。
适配全部:按A键查看整个图表。
跳至:双击函数或事件节点可在图表或其图表选项卡中找到该函数或事件节点。
事件图表
蓝图的事件图表包含一个节点图表,它使用事件和函数调用来执行操作以响应游戏玩法事件。 你可以在这里设置交互功能和动态响应。 例如,光源蓝图可以通过响应伤害事件关闭其光源组件并更改材质。
事件图表中的所有逻辑都是对游戏玩法过程中发生的事件的响应,例如响应玩家输入、触发动画或播放声音。 任何时候当你想到“当发生这种情况时,我想做那件事”,你都需要从一个事件开始。
一个蓝图可以包含多个事件图表,这些图表都作为同一蓝图的一部分运行。 多个事件图表仅用于将逻辑组织到单独的部分中,不会影响蓝图的行为方式。
在BP_JumpPad事件图表选项卡中,你会看到一系列节点,当Actor与此蓝图重叠时,这些节点就会执行,例如当玩家在游戏中走过跳跃板时。 当此事件发生时,蓝图会使该Actor执行跳跃动作,但速度高于正常水平。
要在图表中查找特定节点,请在图表视图中使用快捷键CTRL + F搜索节点。 例如,要查看Event ActorBeginOverlap节点,请使用Ctrl + F快捷键并在搜索字段中键入Event ActorBeginOverlap。 选择结果即可将视图平移到该节点。
可执行操作的节点具有执行引脚,也称为exec引脚,由节点上的白色三角形表示。 如果节点的执行引脚未连接到另一个节点,则三角形具有白色轮廓。
你会注意到事件节点没有输入执行引脚。 这是因为事件节点会在游戏世界中触发定义的事件后立即运行。 在此示例中,当Actor在游戏中与BP_JumpPad的Actor重叠时,此事件将触发。
节点也可以有数据引脚。 例如,Event ActorBeginOverlap有一个Other Actor引脚,该引脚是对与BP_JumpPad关卡对象重叠的关卡对象(Actor)的引用。 数据引脚在节点之间传递值,执行引脚控制节点的执行顺序。
Event ActorBeginOverlap节点的执行引脚连接到Cast To Character节点。 这意味着当世界中的Actor(如玩家)与跳跃板Actor重叠时,此蓝图将执行Cast To Character节点。
节点之间的连接通常被称为连线。
如果你断开Event ActorBeginOverlap节点的执行引脚与Cast To Character 节点的连接,但保持Other Actor引脚连接,则什么都不会发生,因为执行引脚未连接——这意味着Event节点不会触发Cast To Character节点。
要删除连接或引线,请按住Alt键并点击该引线。 从一个引脚拖动到另一个引脚以连接连线。
要重连连线,双击连线即可创建重路由节点。 将光标悬停在重路由节点上,直到光标变为四个箭头,然后拖动重路由节点来移动它。
要详细了解在事件图中执行节点操作,请参阅放置节点和连接节点。
变量
变量是具有以下特征的属性:
保持一个值,例如距离测量值或角色可以移动的速度。
引用世界中的某个对象,例如Actor使用的静态网格体。
你可以设置变量仅供蓝图访问,或使其在关卡编辑器中可编辑,以便设计人员轻松自定义放置在关卡中的蓝图实例。
在BP_JumpPad的事件图表选项卡中,查看蓝图编辑器左侧的我的蓝图面板。
在变量部分中,你可以看到两个变量:Velocity和Color Target。
单击Velocity变量将其选中。 在细节面板中,有与该变量相关的各种属性。 在列表的最底部,你将看到Default Value 类别,你可以在其中设置Velocity变量的值。
在本例中,Velocity设置为0、0、800。 这意味着施加到玩家上的速度是Z轴方向的800个单位,即方向向上。
因此,跳跃板的功能为:“当玩家走过这个跳跃板时,以800厘米/秒的速度向上移动。”
如果你查看JumpPad变量,你会发现它们旁边有睁开的眼睛图标。 这意味着这些变量是公开且可编辑的变量,使其可在关卡中该蓝图的所有实例上进行编辑。
你可以从关卡编辑器中重载可编辑变量的每个实例的默认值,而无需打开和编辑蓝图。
要查看如何在蓝图之外编辑变量的示例,请按照以下步骤操作:
点击虚幻编辑器左上角附近的关卡选项卡,返回关卡编辑器。
打开内容浏览器,在JumpPad文件夹中,将
BP_JumpPad资产拖入关卡的地面。 确保已选中它。在细节面板中,找到名为Default的类别。 在此类别下,你可以看到你之前看到的两个变量——Velocity和Color Target。 这些变量在此处可见,因为这两个变量在蓝图中被设置为可编辑(它们的眼睛图标处于睁开状态)。
返回到
BP_JumpPad选项卡。 在我的蓝图 > 变量部分下,点击Velocity变量的眼睛图标,使其变为非公开且不可编辑。 睁开的眼睛变为闭合的眼睛。要应用你的更改,请点击蓝图编辑器左上角的编译按钮。
编译会检查蓝图是否存在错误,并更新蓝图,使最新更改在关卡中生效。
返回关卡编辑器,选择BP_JumpPadActor,然后再次查看细节 > 默认部分。 Velocity变量缺失,因为它不再是可编辑实例。
要将蓝图恢复到原始设置,请返回蓝图编辑器,再次点击Velocity变量旁边的眼睛图标。
点击编译和保存。
当变量为公开且可编辑时,其他蓝图也可以使用它们。 例如,你的关卡的关卡蓝图可以访问并使用跳跃板的Color Target变量来改变跳跃板的颜色。
有关变量类型、创建和编辑变量以及在蓝图图表中引用变量的更多信息,请参阅蓝图变量。
函数
函数是属于特定蓝图的节点图表,可以从蓝图中的另一个图表执行或调用。 函数具有一个由节点指定的单一进入点,该节点的名称即为函数名称,并包含一个执行输出引脚。 从另一个图表调用函数会执行函数中的逻辑,从函数入口节点开始。
在构建蓝图类时,你可能希望在多个位置甚至其他蓝图中重用事件图表中的部分逻辑。 你可以创建一个添加节点的函数,然后从任何蓝图中调用该函数,而不是在许多地方重建相同的逻辑。
当调用一个存在于其他蓝图中的函数时,该函数的逻辑仍然在其所属的蓝图上运行。 所谓的“调用”,只是提供了一个从外部访问该函数的入口。
例如,你可以在玩家角色蓝图中创建一个HasKey函数,该函数获取所需的钥匙,将该钥匙与玩家的物品栏进行比较,然后返回true或false。 然后,其他蓝图(一扇门、一个宝箱、一个 NPC角色)都可以在执行其他行为之前调用该函数来检查玩家是否拥有特定的钥匙。 每个不同的关卡对象都可以重复使用玩家角色的HasKey函数中的逻辑,而无需在其蓝图中重新创建。
如在一个图表中使用相同节点集超过两次,可考虑将其设为函数或宏以便重复使用。
更多信息请参阅 函数。
为蓝图逻辑添加注释
你可以在蓝图中添加注释,以创建仅用于视觉提示的笔记,将节点归类并解释蓝图的各个部分的功能。 注释能帮助你和团队成员一目了然地了解节点正在执行的功能,并保持蓝图的整洁。
在构建蓝图逻辑时,首先专注于创建功能,然后突出显示已添加的节点并添加注释以包含和描述它们。
请按照以下步骤,在蓝图中添加注释:
点击图表,确保其为当前活动面板。
按下键盘上的C键。 此操作会创建一个注释框。
双击注释框顶部的文本区域即可输入注释内容。
要调整注释框的大小,需先确保其处于选中状态(带有黄色高亮轮廓),然后拖动其边缘或角落。
要将节点归入注释框内,只需将节点拖动到注释框的范围内即可。
你还可以选择一个或多个节点,然后按C键添加一个包含所选节点的注释。
你还可以更改注释的颜色,帮助你一目了然地识别图表的不同区域。
继续探索蓝图
现在你已经了解了基础知识,请继续查阅以下主题或教程,深入学习蓝图。