docs.unity3d.com
    Show / Hide Table of Contents

    Add relations to a Custom C# node

    Note

    To add logic to a node, you must create a Custom C# node and add ports. The examples below are based on the previous examples for a Custom C# node. For more information, see Create a new simple Custom C# node.

    After you add ports and add logic to a node, relations help Visual Scripting correctly display a Custom C# node in a Script Graph.

    To add relations to a node:

    1. Go to Window > General > Project, or press Ctrl+5 (macOS: Cmd+5) to open the Project window.

    2. Double-click the C# file. Unity opens the file in the program you specified in your preferences, under External Script Editor.

      Note

      For more information on script editors in Unity, see the Integrated development environment (IDE) support in the Unity User Manual.

    3. In your external editor, add relations in the format $RelationType$($Port1$, $Port2$), where $RelationType$ is the relation type you want to assign between the ports you specify as $Port1$ or $Port2$.

      For example, to assign relations to the previous example node:

      using System;
      using Unity.VisualScripting;
      using UnityEngine;
      
      public class MyNode : Unit
      {
      [DoNotSerialize]
      public ControlInput inputTrigger;
      
      [DoNotSerialize]
      public ControlOutput outputTrigger;
      
      [DoNotSerialize]
      public ValueInput myValueA;
      
      [DoNotSerialize]
      public ValueInput myValueB;
      
      [DoNotSerialize]
      public ValueOutput result;
      
      private string resultValue;
      protected override void Definition()
      {
          inputTrigger = ControlInput("inputTrigger", (flow) =>
          {
              resultValue = flow.GetValue<string>(myValueA) + flow.GetValue<string>(myValueB) + "!!!";
              return outputTrigger;
          });
          outputTrigger = ControlOutput("outputTrigger");
      
          myValueA = ValueInput<string>("myValueA", "Hello ");
          myValueB = ValueInput<string>("myValueB", String.Empty);
          result = ValueOutput<string>("result", (flow) => resultValue);
      
          Requirement(myValueA, inputTrigger); //Specifies that we need the myValueA value to be set before the node can run.
          Requirement(myValueB, inputTrigger); //Specifies that we need the myValueB value to be set before the node can run.
          Succession(inputTrigger, outputTrigger); //Specifies that the input trigger port's input exits at the output trigger port. Not setting your succession also dims connected nodes, but the execution still completes.
          Assignment(inputTrigger,result);//Specifies that data is written to the result string output when the inputTrigger is triggered.
      }
      }
      

      For more information on relation types, see Custom C# nodes.

    4. Save your script file.

    5. Return to the Unity Editor.

    6. Do one of the following:

      • Open a Script Graph where you've already added your node..
      • Right-click anywhere in the Graph Editor to open the fuzzy finder. Then, select your node in the fuzzy finder to add it to your graph.
    7. In the Graph toolbar, enable Relations.

      Visual Scripting displays the relations you assigned to the Custom C# node. If you used the previous code sample, the node's relations might look like the following image:

      An image of the Graph window. The opened Script Graph has two groups that each contain a single Custom C# node: a yellow Before group and a purple After group. In the Before group, the Custom C# node, My Node, has no relations. Visual Scripting doesn't display any lines on the node to demonstrate a relation between ports. In the After group, the Custom C# node has two lines that branch from the ports of the My Value A port and the My Value B port. These two lines meet at the Input Trigger port. On the node, the line from the Input Trigger port separates into two lines. One line goes to the Output Trigger port, while the other goes to the Result output port.

    Next steps

    After you add relations to a node, you can choose to add documentation or customize the node with attributes.

    Back to top
    Terms of use
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023