返回

FlowCanvas自定义节点

Simplex节点

  1. 动作节点 可调用动作节点用于创建需要调用流信号的动作。它们具有1个流量输入,1个流量输出,最多5个值输入参数并且根本没有值输出。简而言之,您可以派生泛型CallableActionNode类,其中泛型参数表示节点的值输入参数,然后覆盖Invoke void方法,该方法具有与声明的泛型参数相同且类型相同的多个参数。例如。

  1. 功能节点 可调用功能节点与上面的可调用操作类似,但是它们始终返回1值输出。该过程与之前非常相似,但是在这种情况下,第一个通用参数表示返回值的类型,您将要覆盖的Invoke方法将需要返回所声明的类型。例如

  1. 潜在动作节点 潜在动作节点与之前的CallableAction节点相似,但是在这种情况下,Invoke方法是IEnumerator,被称为协程。因此,您需要将其视为协程。例如

  1. 纯功能节点 纯功能节点用于不需要任何流量信号的节点,但是当它们通过单个Value输出发出请求时,它们只是简单地返回一个值。第一个通用参数是节点的返回类型和您需要覆盖的Invoke方法,而其余的通用参数是要使用的函数的值输入参数。例如。

Full节点

创建完整的流节点可能更难理解,但是您可以完全访问所有内容,并且可以创建所需的任何类型的节点,例如新的事件,流控制器或其他任何对象,尽管我个人建议这样做仅事件和流控制器。

让我们以重新创建FlowController节点“ SwitchBool”为例,该节点实际上是if-then-else语句。为此,创建一个类并派生自“ FlowControlNode”,然后必须重写RegisterPorts方法并在其中注册端口。

使用以下方法完成端口的注册:

  • FlowInput:AddFlowInput(字符串名称,动作指针) name:端口的名称。 指针:调用此流输入后将被调用的委托。

  • FlowOutput:AddFlowOutput(字符串名称) name:端口的名称。 要执行端口,您必须在返回的FlowOutput对象上调用Call(),并接收当前的Flow对象。

  • ValueInput :AddValueInput (字符串名称) name:端口的名称。 要获得连接到端口的值,只需调用返回对象的.value属性即可。

  • ValueOutput :AddValueOutput (字符串名称,Func getter) name:端口的名称。 getter:将被调用以获取T类型的值的委托。

如上所示,如果名称需要与类名称不同,可以使用许多属性来指定名称,以及节点类别和帮助描述的属性。

Event节点

在极少数情况下,您可能想创建一个特定于您的项目的自定义事件节点,而现有事件节点不足或不足。这样,您可以创建一个自定义事件节点来处理几乎所有需要的内容。这是包含的“输入按钮”事件节点的示例。

请注意,以上节点实现了IUpdatable接口。由于Unity输入系统无法基于常规事件(UnityEvent或C#Event)运行,因此我们需要逐帧检查输入。在这种情况下,当然需要实现IUpdatable接口及其单个“更新”方法。

官方文档链接