代码改变世界

虚幻4蓝图快速入门(三)

2016-09-30 21:32  风恋残雪  阅读(...)  评论(... 编辑 收藏

数学表达式节点

概述

要想创建一个数学表达式节点,请右击图表并从关联菜单中选择 Add Math Expression(添加数学表达式)... 。

 

数学表达式节点就像一个合并的图表。它是一个独立的节点,您可以双击它来打开构成其功能的子图表。 最初,该名称/表达式是空的。任何时候,当您重命名该节点时,都将会解析新表达式并生成新的子图表。

变量

变量命名非常灵活,但是记住以下几点非常重要:

  • 变量名称本身可以包含数字,但是不能以数字开头。
  • 变量名称不能和隐藏的蓝图变量名称一样。
  • 确保您正在使用正确的变量类型。比如, boolVar+1.5 就不是一个有效的表达式。

运算顺序

运算顺序如下所示(按照优先级从高到底的顺序):

  1. 括号内的表达式
  2. 阶乘
  3. 指数
  4. 乘除法
  5. 加减法

可用的蓝图函数

注:可能根据UE版本的不同,支持的函数可能不一样。

  • 三角函数 (sin/cos/tan、asin、acos, 等)
  • 区间限定函数 (min, max, clamp,等)
  • 四舍五入函数 (floor, fceil, round等)
  • 指数函数(square, power, sqrt, loge, e/exp等)

其它

因为支持的结构体类型、操作符可能会改变,请以官方文档为准。

注释

注释 可被直接添加到单个 蓝图 节点上,也可以注释框的形式添加到组相关节点上并提供其功能的描述信息。 它们可以单独以其管理用途来让 图表 更易读懂,但它们也可以用来提供信息,正如添加注释到节点一样,使用注释或注释框可以把文本描述内容添加到节点上。

创建节点注释

如需直接在 蓝图 图表中添加注释:

  • 在节点上右键点击。
  • 在出现的菜单中,在 Node Comment (节点注释)文本框位置处输入注释,然后按下 回车 。

创建注释框

创建注释框很容易:

  1. 选择一个您想要进行注释的节点组。 您也可以先创建一个空白的注释框,并在稍后对节点附近的注释框进行排列,或者将其作为悬浮注释放置于指定区域。
  2. 右键点击并选择 Create Comment from Selection (从选择项中创建注释) (如果未选中任何节点则选择 Add Comment... (添加注释...) )。 此时将出现新的注释框。

类型转换(Casting)

跟C++中一样,可以给一个类型进行类型转换,类似于C++中dynamic_cast的功能。

事件

Events(事件) 是从游戏性代码中调用的节点,用于启动执行 事件图表 中的一个独立的节点网络 。这允许 蓝图 执行一系列的动作来对游戏中发生的 某些事件做出响应,比如游戏启动、关卡重置、受到伤害 等。您可以在 蓝图 中访问这些事件,以便实现新功能、覆盖或扩展默认功能 。在一个 事件图表 中,可以使用多个 事件 ;但是每种类型的事件仅能使用一个。

注意:

每个事件仅能执行一个单独的对象。如果你想从一个事件触发多个动作, 您需要线性地把它们连接到一起。

示例

LevelReset(关卡重置)

当关卡重新启动时,LevelReset(关卡重置)会发出一个执行信号。当您在重新加载关卡后需要立即触发一些动作时,这是有用的, 比如,玩家已死但不需要重新加载关卡 的游戏情形。

自定义事件

Custom Events(自定义事件) 为您提供了一种创建您自己的事件的方法,您可以在您的 蓝图 序列 的任何地方处调用这些事件。当您正在把多个输出执行线连接到一个特定节点的输入执行引脚时, 使用 自定义事件 可以简化您图表的节点连线网络。您甚至可以在一个 蓝图 的图表中创建 自定义事件 ,而在另一个图表中调用该事件。

创建自定义事件的简单流程:

  1. 创建并命名 Custom Event(自定义事件) 。
  2. 设置这个事件应该具有的任何输入参数及其默认值。
  3. 创建一个调用该自定义事件的特殊函数。
  4. 输入任何需要的输入参数。

创建自定义事件

 

  • 通过右击并从关联菜单中选择 Add Custom Event(添加自定义事件)... 来创建一个 Custom Event(自定义事件) 节点。

  • 给这个新事件赋予一个名称

  • 在您的新事件的 Details(详细信息) 面板中,您可以设置当在服务器上调用该事件并添加输入参数时,是否将该事件复制到所有客户端上。

可以通过New来添加参数,要想改变节点边缘上的这个参数的引脚的位置,请使用展开的 详细信息 面板项的向下和向上箭头。

 

现在,和其他 事件 或执行节点一样,您可以把其他节点附加到您的 自定义事件 的输出执行引脚上,这样当触发了您的 自定义事件 时将会开始执行那个节点网络。 这个 自定义事件 向屏幕输出了一个字符串。

调用自定义事件

您已经创了 自定义事件 及其相关的节点网络,但是和常规的 Events(事件) 不同,没有触发 自定义事件 的预制条件。要想调用您的 自定义事件 ,请右击并从关联菜单中选择 Call Function(调用函数) > [自定义事件名称] 。

自定义事件 上设置的任何输入参数在新的节点中都将呈现为输入数据引脚,以便它们可以传入到 自定义事件 中。您可以根据需要使用数据连线把任何数据引脚连接到变量或其他数据引脚上。

和常规的 Events(事件) 不同,常规事件在每个图表中每种 事件 类型仅能调用一次;但是您可以在图表中多次调用一个 自定义事件 。这样, 自定义事件 就可以把多个执行输出分支连入到 一个单独的执行输入上,而不需要直接连线。

在这个示例中,如果 IsSuccess 布尔变量为 false ,那么将打印一个错误信息。这个图表的功能,和在序列中的 Branch 节点后面连接 Print String 节点的功能一样, 但是它有个附加功能是图表中的其他部分可以使用 Print String 节点,且图表中两个网络部分的彼此位置不必太近。

事件图表

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

关卡蓝图 中的 EventGraph(事件图表) 包含一个节点图表,该图表使用事件和函数调用来之行动作,以便对 游戏事件做出反应。这个事件图表用于从总体上处理关卡中的事件,及给世界中特定的 Actor 和 蓝图 实例 添加功能。

无论哪种情况,应用 EventGraph(事件图表) 都要通过添加一个或多个事件来作为入口点,然后连接 Function Calls(函数调用) 、 Flow Control(流程控制) 节点及 变量 来执行期望的动作。

组件

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

添加组件

要想在 组件 列表中向 蓝图 添加一个组件:

  1. 从该下拉列表中选择您想添加的组件类型,比如一个 **CameraComponent(相机组件)** 。

要想通过拖拽并放置方式来添加一个组件:

组件也可以这样进行添加,即通过从内容浏览器中拖拽 StaticMesh 、 SoundCue 、 SkeletalMesh 和 ParticleSystem 资源并将其放置到 组件列表中。

删除组件

要想从 Components(组件) 列表中删除一个组件,仅需简单地右击该组件的名称并选择 Delete(删除) 即可。

组件资源

要想把一个资源分配给 组件列表 中的一个组件:

  1. 在内容浏览器中,选择要分配的资源。该资源类型必须和组件类型 相兼容。

  1. 在 组件 面板中,选择您想将该资源赋予的组件。该组件的详细信息将会出现在 详细信息 面板中。按下 详细信息 面板的 [Asset(资源)] 部分中的 按钮。这样该资源就分配给了该组件。

组件事件和函数

根据组件类型的不同,您可以基于它们在事件图表中添加事件 和/或 函数。比如,另一个actor(比如一个Pawn)穿过 Box Component时,该Box Component可以有一个Overlap事件。以这种方式创建的任何事件或函数都是针对那个特定函数的,不必测试来确认它所涉及的组件。

创组件事件非常简单,如下所示:

  1. 创建一个可以为其创建事件的组件。在这个示例中,我们使用一个BoxComponent(盒体组件)。

  1. 为您的组件提供一个名称 - 这会为其创建一个变量。

  1. 在 Variables(变量) 选卡中,选择该新变量。

  1. 在 图表 选卡中,右击弹出关联菜单。如果该组件有任何相关联的事件或函数,都会在顶部列出这些事件或函数。

在这个示例中,我们添加了一个 Overlap事件,每当有actor穿过这个Box Component体积时都会调用该事件。

注意:不是所有的组件都有相关联的事件。比如,一个Point Light Component(点光源组件)仅具有函数。

构造脚本

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

注意:仅类蓝图包含 Construction Scripts(构造脚本) 。关卡蓝图没有构造脚本。

Construction Script(构造脚本) 图表的执行入口点是一直存在的 ConstructionScript 节点。

蓝图调试

蓝图调试是一种非常强大的功能,允许您在Play In Editor(在编辑器中运行)或Simulate In Editor(在编辑器中模拟)模式下使用断点来中止游戏执行过程,并单步调试任何蓝图图表或关卡蓝图。

调试控件允许您在Play In Editor和Simulate In Editor模式下控制游戏的执行过程。当游戏运行时,会在蓝图编辑器中启用这些控件。根据所调试的 蓝图 及当前调试状态的不同, 会在工具条 上出现不同的调试按钮。一些控件仅当遇到相关 断点 时才会激活。

当激活 Simulate in Editor 或 Play in Editor模式时, Debug(调试) 选卡和 Blueprint Debugger(蓝图调试器) 都将会显示情境关联的调试按钮。其中 Debug(调试) 选卡可以从 蓝图编辑器 中的 Graph(图表) 模式下打开。

断点

当从编辑器中运行游戏时,Breakpoints(断点) 可以在任何点处中止游戏的执行过程。属于一个蓝图或关卡蓝图的所有图表的所有断点都会显示在 Debug(调试) 选卡中。该列表中的断点名称都有超链接,您可以点击它们,并直接跳转到 Graph(图表) 选卡中和那个断点相关的节点处。

您可以在要执行的图表中任何节点上设置断点,比如 Function Calls(函数调用) 和 Flow Control(流程控制) 操作,只需通过右击节点并选择 Add breakpoint(添加断点) 即可设置断点。当已经在一个节点上设置了断点时,会在该节点的左上角上显示一个图形。

通过右击断点并选择 Disable breakpoint(禁用断点) 或者点击 Debug(调试) 菜单中断点旁边的图标将其关闭,可以禁用断点。这个处理也可以通过右击 Debug(调试) 选卡中的断点并选择 Disable breakpoint(禁用断点) 来完成。

这样做时断点会留在原处,但是当执行该节点时它不会使游戏停止。已禁用的断点仅显示为一个断点轮廓。

调试选卡和蓝图调试器

Debug(调试) 选卡显示了设计师指定的重要信息,信息以断点、查看值及属于已经执行过的蓝图的所有节点的堆栈追踪的形式显示。当使用断点时,这个窗口也显示了用于控制游戏执行的控件。

变量值查看器

Watch values(查看值) 允许您在执行过程中快速并轻松地查看变量的值。当调试遇到一个断点后,所有的选中Actor及关卡蓝图的查看值都会显示在调试窗口中,并且随着您单步调试整个图表,这些查看值会随之更新。

执行追踪

Execution Trace(执行追踪) 栈显示了所执行的节点的列表,最近执行的节点显示在顶部。

相当于vs中的调用栈,这个列表随着您单步调试整个图表而进行更新。

事件调度器

通过向 Event Dispatcher(事件调度器) 绑定一个或多个事件,您可以在调用该事件调度器后触发所有事件。这些事件可以在类蓝图中进行绑定,但 事件调度器也允许在关卡蓝图激活这些事件。

创建事件调度器

要想创建一个新的事件调度器:

  1. 点击 我的蓝图 选卡顶部的 New Event Dispatcher按钮。
  2. 在 我的蓝图 选卡中的列表尾部出现的名称文本域中,输入该事件调度器的名称。

设置属性

通过在 我的蓝图 选卡内选中该事件调度器,您可以在 详细信息 面板中编辑其属性。您可以为您的事件调度器设置工具提示信息和类目,且可以添加输入。

 

给您的事件调度器添加输入,允许您向绑定到您的事件调度器的每个事件发送变量。这使得数据不仅可以在您的类蓝图中流动,且可以在您的类蓝图和关卡蓝图 之间流动。

 

给您的事件调度器添加输入的过程和给函数、自定义事件及宏添加输入及输出的流程类似。如果您想使用和另一个事件相同的输入,那么您可以使用 Copy Signature from(复制签名) 下拉菜单来指定该事件。 要想给该事件调度器添加您自己的输入:

  1. 点击 详细信息 面板的 Inputs(输入) 部分的 New(新建) 按钮。

  1. 命名该新输入并使用下拉菜单设置其类型

使用事件调度器

一旦您创建了事件调度器后,您可以添加事件节点、绑定节点及解除绑定连接到其上面的节点。尽管您可以在 我的蓝图 选卡中双击事件调度器选项来打开 事件调度器的图表,但是该图表是锁定的,您不能直接修改该事件调度器。绑定、解除绑定及分配方法都允许您向事件调度器的事件列表添加事件, 但调用方法将激活事件图表中存储的所有事件。

创建调度器事件

通过使用Event Dispatcher(事件调度器)菜单上的 Event(事件) 选项创建一个具有正确签名的自定义事件, 使得该事件可以绑定到该事件调度器上。 尽管这个事件节点的看上去和没有连接到 Bind 节点的自定义事件节点类似, 但是当执行 Call [事件调度器名称] 节点时将永远不会触发该事件。

在类蓝图中进行创建

  1. 在 My Blueprint(我的蓝图) 选卡下,从 Event Dispatcher(事件调度器)名称处开始拖拽鼠标并将其放置到您正处理的图表中。
  2. 在出现的菜单中选择 Event(事件) 。

在关卡蓝图中进行创建

 

在关卡蓝图中,可以创建一种特殊类型的Event Dispatcher(事件调度器)事件,此时事件会自动绑定到事件调度器上。 创建这些事件的步骤和创建默认事件(比如 OnClicked 或 OnOverlap 事件) 一样。 关卡蓝图文档中提供了关于这个过程的 详细介绍。

绑定及解除绑定事件

如果没有事件绑定到事件调度器,那么调用该事件调度器将不会产生任何效果。鉴于每个事件调度器都有一个和其相关的事件列表。向该列表中添加一个事件的方法是使用 Bind Event(绑定事件) 节点,从该列表中删除事件的方式是使用 Unbind Event(解除绑定事件) 节点。另外,通过使用 Unbind All Events(接触绑定所有事件) ,还可以解除当前绑定到事件调度器上的所有事件

尽管 绑定事件 节点可以执行多次,但每个事件仅能绑定一次。同时, 类蓝图 和 关卡蓝图 中的事件都添加到同一个事件列表中,所以 Unbind All Events(解除绑定所有事件) 节点将会取消绑定 类蓝图 和 关卡蓝图 中的所有事件。

  • 在 类蓝图 中执行 Unbind All Events(取消绑定所有事件) 节点,将针对该类的所有实例,取消绑定 类蓝图 和 关卡蓝图 中的事件。
  • 在 关卡蓝图 中执行 Unbind All Events(取消绑定所有事件) 节点,将仅针对 Target 端提供的内容,取消绑定 类蓝图 和 关卡蓝图 中的事件。

在类蓝图中进行创建

两种方法:

  • 在出现的菜单中选择 Bind(绑定) 。

  • 在图表中 右击,在出现的关联菜单中展开 Event Dispatcher(事件调度器)

在关卡蓝图中进行创建

  1. 添加到关卡中您想为其调用事件调度器的Actor的引用。
  2. 从该引用节点的输出引脚开始拖拽鼠标,然后释放鼠标来显示关联菜单

调用事件调度器

使用 Call 节点调用一个Event Dispatcher(事件调度器),将会触发绑定到该事件调度器的所有事件。对于每个事件调度器,您可以应用多个 Call 节点,且您既可以在 类蓝图 中调用事件调度器也可以在 关卡蓝图 中进行调用。

在蓝图调用

两种方法:

  • 在 My Blueprint(我的蓝图) 选卡下,从 Event Dispatcher(事件调度器)名称处开始拖拽鼠标并将其放置到您正处理的图表中在出现的菜单中选择 Call(调用)

  • 右击图表,在出现的关联菜单中展开 Event Dispatcher(事件调度器)

在关卡蓝图中进行调用

  1. 添加到关卡中您想为其调用事件调度器的Actor的引用。
  2. 从该引用节点的输出引脚开始拖拽鼠标,然后释放鼠标来显示关联菜单。

蓝图交互的用法

直接交互

引用了一个蓝图的实例,这样就可以直接通过这个实例来调用函数等。

使用场合:

  • 当你关卡中有一个Actor,而想跟另外一个Actor通信的时候。

事件调度器

使用场合:

  • 角色的蓝图想要跟关卡蓝图通信时。
  • 当一个生成的Actor做了某些事情时,你想要触发事件时。

蓝图接口

使用场合:

  • 在蓝图中有一个功能会产生不同的行为时。

类型转换

使用场合:

  • 你有一个角色需要跟关卡中的Actor进行交互,这时需要改变角色的类型时。
  • 你想缎带HUD或者UI控件传递变量时。
  • 你有多个蓝图,这些蓝图有继承关系,你想要把它转换成某个子蓝图。
  • 你有一个蓝图,这个蓝图依赖于另外一个蓝图的变量、事件、函数。
  • 你想获取多个蓝图的同一个基类,并且要同时修改它们。
Locations of visitors to this page