“我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛”
总览
Blueprint 在默认提供了方便的流控制节点有,如 Flip Flop、Gate、DoN 和 MultiGate。 在 C++ 中即使做类似的处理有时也很麻烦,如果能很好地使用这些节点,就可以很简洁地编写处理程序。
下面将介绍以下节点。
Flip Flop
每次执行时,进程 A 和 B 交替执行。
在一个简单的例子中,可能更容易理解门的开/关过程和按钮操作。
在本例中构造的节点中,每次按下 Enter 键时都会输出 “Open” 和 “Close” 日志。
当第一次按下 Enter 键时,输出 “Open”,当
然后再按下 Enter 键,输出“Close”。
如果你再次按下 Enter 键,“Open” 将会输出。
这样,连接到 Flip Flop 节点的 A 的输出和 B 的输出,将会被交替执行处理。
例如,可以设置录音开始按钮和录音结束按钮,以便调试。
如果你尝试在不使用 Flip Flop 的情况下配置相同的处理,配置将如下所示( IsCapture 的默认值为 false)
与使用 Flip Flop 不同的是,您需要添加一个 bool 变量。
而且可以减少可以精简的变量,这样就不会使 Blueprint 复杂化。
Gate
如果进入 Enter : Gate 状态为 Open 的话,则执行该进程。
- Open: 将
Gate设置为Open状态(当进程进入Enter时,进程将被执行) - Close: 将
Gate设置为Close状态(进程将处于Enter状态时,在Close状态时,进程将不会执行) - Toggle:
Open<->Close状态的切换 - Start Closed: 是否将默认的
Gate状态更改为Close状态的标志
如上所述,该行为与进程何时进入 Enter 一样简单,如果连接到 Exit 的进程处于 Open 状态,则执行该进程,如果处于 Close 状态,则不执行该进程。
顾名思义,门(入口,门),当门打开时进行处理,当门关闭时不进行处理。
示例
在这个使用示例中,我们实现了一个只有当按下右键时才会旋转的摄像机。
无论鼠标是否在移动,MouseX 节点返回鼠标在前一帧的横向移动量。
它是一个输入节点,像 Tick 一样处理每一帧。
我把它与一个 Gate 结合,这样当你按下右键它打开,当你释放时它关闭。
这将只有当你按住右键点击时,才会调用 AddControllerYawInput 。
Gate 经常与 Timeline 和 Tick 结合在一起。
你可以很容易地实现一个它只在一定的体积(Volume)内运行的函数,或者是一个只在执行特定的输入时运行的函数。
Do N
- Enter: 如果保留
N中设置的次数,则执行Exit所连接的进程。 - N: 可执行的最大数量
- reset: 以
N指定的值来重置Counter - Exit: 连接你想要执行的进程
- Counter: 已经执行的次数(注意:它不是剩余的可以执行的次数,即它是 1,2,3 的方式增加的) 。此外,当你
Reset时,Counter也会被重置。
当你希望创建一个可以执行一定次数的函数时,你可能想使用该节点。
这也是人们很容易误解 DoN 的地方,尽管你能认为它的确将运行你所指定的 N 次
当您希望创建一个进程其仅能执行有限的次数的时候,才适合使用该节点。
- 例1、只能获得一定次数的事件(一个方块的图像,可以获得某个运行游戏的硬币)
- 例2、销毁处理一个对象,该对象可以通过应用一定数量的攻击而被销毁
MultiGate
- Input: 默认情况下,输入按顺序工作,当所有输出完成时,函数就不会运行了。
- Reset: 初始化为
StartIndex指定的值。 - Is Random: 随机执行输出。 如果没有设置
Loop标志,则所有操作都将停止工作。 - Loop: 可以在所有执行完成后再次执行。
- Start Index: 该索引显示函数的第一个输出。 在
-1的情况下,如果没有设置Loop,它将从顶部顺序执行。
例子: 如果你想依次切换三个摄像头
首先,在 Level 上放置三个摄像头,如下图所示。
通过使用 MultiGate 并勾选 Loop,你可以这样切换摄像头 1-> 2-> 3-> 1… ,如下图所示。
即使不使用 Loop 标志,也可以在执行完最后一个进程后通过连接到 Reset 来创建一个 Loop,如下所示,行为和之前一样。
如果你选择 Random,行为将如下所示。
但是,在某些情况下,输出与执行 Random 的结果 Out0-> Out0 相同,因此使用时请记住这一点。
总结
除了上面描述的那些节点之外,Blueprint 中还有许多有用的节点。
在这个例子中,Gate、MultiGate 等在 C++ 中构建时会有点麻烦。
至于 Flip Flop,C++ 就相对很简单。
Blueprint 的另一个优点是,可以轻松地增加或减少输出的数量,如MultiGate。
将现有节点存放在脑海的角落里,以便未来创建更可读的节点流(node flow)。