【ue4】【蓝图】流程篇
前言
常见的流程控制结构
Sequence
Branch
ForLoop
ForLoopWithBreak
ForEachLoop
WhileLoop
Do Once
Do N
FipFlop
Gate
MultiGate
Sequence 序列
使单个执行脉冲能按顺序触发一系列事件
节点可有任意数量的输出
所有输出引脚都会在序列节点获得输入时马上被调用
无延迟地按顺序调用
Branch 分支
类似于
if-else
分支结构
上图类似于下面的 C++ 代码
1 | bool flag = true; |
ForLoop 循环
类似于
for循环结构
上图类似于下面的 C++ 代码
1 | for(int i = 0; i <= 10; ++i) { |
forloop
的蓝图宏过程如下
可以看出局部变量
Variable
的作用就相当于上面 C++ 代码中的 i
ForLoopWithBreak 循环
可以使用自定义事件来结束循环
在循环体内需要 break 的地方调用此自定义事件即可
上图类似于下面的 C++ 代码
1 | for(int i = 0; i <= 100; ++i) { |
ForEachLoop 循环
常用于对 array 操作
在实际中常结合
GetAllActorsOfClass
对一种类型的全部集合进行操作
WhileLoop 循环
相当于 c++ 中的 while循环
上图类似于下面的 C++ 代码
1 | int idx = 0; |
WhileLoop
的宏如下
通过一个分支(用来判断是否结束) 和 一个序列(用来循环执行)来实现
我们可以基于这个自己实现一个带有 delay 功能的 while 宏
在循环体里加了一个 delay 函数的调用即可
Do N
只会执行 N 次, 直到执行 Reset 重置
Do Once
相当于上面的 Do N 中的 N = 1 的情况
只会执行 1 次, 直到执行 Reset 重置
FipFlop
切换执行
先执行A, 再执行 B , 依次交替执行
同时有一个 bool 变量,如果当前执行的是 A, 此 bool 变量为 true
Gate 门
用来开启和关闭执行流
门的状态决定是否从 Exit 传出
MultiGate
取入单个数据脉冲并将其传送到任意数量的潜在输出
随机按顺序发生
可能会造成循环
总结
通过了解上述的流程控制
我们几乎可以将蓝图类比到其他的语言
只要有了流程控制,一些复杂的功能也可以实现
但是蓝图难以协作和调试的特点使我们很难用它来开发复杂的东西
但是既然学到了这里,我们不妨来试一下
这里我们拿 快速幂
来练手
pow_mod(a, b, m)
函数用来快速计算 在模m下a的b次方
c++代码如下
1 | int pow_mod(int a, int b, int mod) { |
转换成蓝图
这也许是不提倡用蓝图写逻辑的原因,更不用说写算法了(.)/