2. Working with Types 使用类型
FlowCanvas的目标是能够使用任何类型,你可能需要从任何程序集,这基本上意味着如果你需要的自定义类型也支持。 为了保持编辑器的清洁,而不是杂乱的数以千计的类型,但存在一个简单的编辑器窗口,您可以在其中定义您要在项目中使用哪些类型。 默认情况下,为您添加了一些常见类型,但您可以根据需要随意添加,删除和修改列表。
要打开首选类型编辑器,请转到“工具/ ParadoxNotion / FlowCanvas /首选类型编辑器”。
此编辑器中列出的类型将负责许多事情。
- 可用的黑板变量类型供您添加。
- 自动生成的反射节点。
- 所有通用的中心节点和菜单,以(T)结尾。
这是一个非常重要的编辑器窗口!
2.1. Generic Type Nodes 通用类型节点
当您要通过“添加节点”上下文菜单或类似菜单选择要添加的节点时,有许多带有(T)后缀的节点。 这些节点是通用节点。 这意味着他们可以与任何你想要的相关类型。 这样的节点,将显示为类别,在其下将列出几种可用的类型。
因此,你不会找到像GetTransform或GetAnimator的节点。 相反,您将遇到像GetComponent(T)这样的节点,这将足以获得您所需要的任何组件类型。
现在,关于这些节点的最重要的事情是,将被列为可用的类型直接影响首选类型编辑器和其中列出的类型。 因此,如果默认类型不够,则非常重要的是为您的项目定制“首选类型”列表。
2.2. Connecting Assignable Types 连接可分配类型
如前所述,“值端口只能连接到相同或可分配类型的其他值端口”。
这基本上意味着,你能够连接某些值类型端口在一起,即使他们不是完全相同的类型,如果他们可以被转换或投射到那种类型。 这是自动处理,为您节省了大量的时间。 在实践中,如果编辑器允许你连接2个端口在一起,这意味着它的可能,你没有什么更多的担心。 当进行这样的转换时,连接将显示指示事实的图标。 在下面的示例中,float已连接到布尔值。 因此,此转换将导致false,因为值为0(如果值为1+,则为true)。
为方便起见,以下是FlowCanvas支持的转换及其完成方式。
From
|
To
|
Through
|
---|---|---|
Any Primitive | Any Primitive | .ConvertTo() |
GameObject | Any Component | .GetComponent |
GameObject | Transform | .transform |
Any Component | GameObject | .gameObject |
GameObject | Vector3 | .transform.position |
AnyComponent | Vector3 | .transform.position |
A Child Type | Base Type | upcasting |
A Base Type | Child Type | downcasting |
Anything | String | .ToString() |
3. Node Categories 节点类别
FlowCanvas中的所有可用节点实际上可以分为四种分开的类型,即...
-
- 事件
- 流量控制器
- 操作
- 功能
3.1. Events 事件
事件节点负责开始和触发任何流执行。 没有事件节点没有什么会真正发生在您的流程图。 添加事件节点以响应世界或对象事件以及输入,触发器,碰撞等变化,并最终将其流输出连接到其他节点,以指定在事件触发时将发生什么。
一些事件节点需要一个对象引用,事件将发生在该对象引用上。 默认情况下,目标对象将是“Self”,它对应于FlowScriptController组件附加到的游戏对象。 您可以通过检查器通过分配新的引用或链接一个黑板变量来自由改变目标对象。
所有事件节点都有一个红色标题名称,在Flow和Value端口的混合中没有输入和任何数量的输出。 事件节点的值端口通常包含有关刚刚触发的事件的信息。
3.2. Flow Controllers 流量控制器
流控制器节点负责操纵流执行,例如以多种不同的方式分支流,过滤流,或甚至合并流。 它们是在流程脚本中创建逻辑的方法,并且对应于各种脚本命令,如if-then-else,while,for-each等。
流量控制器具有蓝色标题颜色,并且始终具有至少1个流量输入和1个流量输出端口。
3.3. Actions 操作
动作节点负责“使事情发生”,如移动对象,设置值,销毁对象,应用物理力等。动作节点等同于脚本语言中的方法。 99%的时间,Action节点没有Value输出,但是有多个不同的Value输入用于设置操作的参数。
动作节点,总有1个Flow输入,这简单地指“执行”动作!
3.4. Functions 功能
函数节点等同于脚本语言中的函数。 与Action节点相比的主要区别是,它们总是返回一个值输出端口形式的值。 函数节点负责处理数据,获取数据的数学操作,以及将这些数据馈送到其他节点。
默认情况下,函数节点不需要流执行工作,因此它们没有流输入或输出端口! 您只需将Value输出连接到您希望的某个其他节点即可。 尽管如此,在一些罕见的情况下,您希望通过显式地将Flow连接到节点来控制节点何时被调用。 在这种情况下,您可以通过勾选节点检查器上相应的切换来使节点“可调用”。
完成后,节点将被转换为可调用函数,如下所示,其中将出现1个流量输入和1个流量输出。 因此,仅当您显式调用带有Flow信号的节点时,才会设置节点的Value输出。
3.5. Constructors & Extractors 构造函数和提取器
虽然技术上构造函数和提取器节点是函数节点,但它们是值得一提的。 这两个都可以在“实用程序”类别下找到。
分解器很容易理解。 简单地说,他们构造一个新的对象(大多是一个结构体),它的几个组件。 因此,不是有一个固定的Vector3变量,你可以从它的三个组件x,y和z构造一个。
另一方面,提取器是完全相反的。 它们接受一个对象(同样主要是一个结构体),并暴露他们的组件供您使用。
4. Variables 变量
变量是任何程序,脚本或可视脚本的一个非常重要的方面。 FlowCanvas具有对所有和任何类型的变量的开箱即用的优越支持,以及一些重要的功能,如属性绑定或通过UNET的网络同步!
4.1. Blackboard Variables 黑板变量
Blackboard是一个组件,它在您附加了任何FlowScriptController组件的同一游戏对象上自动添加,是创建,存储和检索要在该游戏对象的任何流程脚本中使用的变量的主要位置。 黑板检查器也显示在右上角的流程脚本编辑器中。
要创建一个黑板变量,你只需要点击“添加变量”按钮,如上所示。 包含所有可用类型的上下文菜单将显示为您添加变量。 请记住,所有类型都受支持,只要将它们添加到首选类型列表中,如前所述!
一旦你创建了一个黑板变量,你可以使用它在游戏对象的任何流程图中获得它的值或根据需要设置它的值。
4.2. Using Variables in FlowScript 在流程控制脚本中使用变量
使用黑板变量
要使用创建的Blackboard变量,获取或设置它的值,可以通过“添加节点”上下文菜单,在“变量”类别下,通过“获取黑板变量”或“设置黑板变量”子 类别,选择要获取或设置的变量名称。
获取值
选择获得一个黑板变量,将创建一个变量节点,链接到该黑板变量。 “$”标记总是在名称之前使用,以指示它是一个链接的黑板变量名称。 在本例中为“$ myInteger”。 节点的单值输出端口将返回该链接变量的值。
设置值
另一方面,选择设置黑板变量将创建一个不同类型的节点,如下所示。 动作节点。 因此,该值只有在使用Flow信号调用节点时才会设置,并且默认情况下将设置为等于连接的值输入参数。
在上述节点的节点检查器中,还可以指定在设置变量时要使用的操作。 不是简单地将变量设置为等于value参数,而是可以选择添加,减去,乘法或除以value参数。
使用常量变量节点
你不总是需要使用黑板变量。 在某些情况下,你可能只需要一个常量变量在某个地方和别的地方使用。 在这些情况下,最好只是创建一个GraphVariable节点,如下所示,并直接通过节点检查器设置它的值。
后来,如果你改变主意,并想将此节点链接到一个黑板变量,你可以通过点击单选按钮,通过检查器这样做!
4.3. Property Binding 属性绑定
将变量绑定到属性是加快工作流程的好方法。 在实践中,绑定到属性的变量意味着变量表示该属性,并作为它的“桥梁”。 因此,无论何时获取变量值,您都将获得绑定的属性值,而当您设置变量值时,您将改为设置绑定的属性值。
黑板变量可以绑定到黑板组件所附着的同一游戏对象上的任何组件的任何属性。 要将变量绑定到属性,您只需单击变量选项按钮,然后选择要绑定它的属性!
或者,如果您还没有已创建的变量,则可以通过“添加变量”按钮菜单直接创建绑定变量。
4.4. Network Sync 网络同步
Blackboard变量可以使用新的Unity 5系统,UNET轻松地在网络上同步。 所有你需要做的是,将SyncBlackboard组件添加到同一个游戏对象,其中有你想要同步变量的黑板。
一旦完成,黑板的所有由UNET系统支持并且未被标记为受保护的变量将在网络上同步。 根本不需要额外的步骤。 如果要忽略特定变量被同步,您必须将其标记为protected。 这可以简单地通过变量选项按钮来完成。 保护变量也以透明形式显示为提醒。 在以下示例中,“isRunning”和“myFloat”标记为受保护。