b486678290
Library -Artifacts
103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# Create a Custom Scripting Event Sender node
|
||
|
||
> [!NOTE]
|
||
> Before you create a Custom Scripting Event Sender node, you must create a Custom Scripting Event node. [!include[tasks-note-end](./snippets/custom-events/vs-tasks-note-end.md)].
|
||
|
||
After you create a Custom Scripting Event node, you can create a Custom Scripting Event Sender node to trigger the Event from any other Script Graph in the same scene, or the same Script Graph.
|
||
|
||
You can also choose to create a separate script to trigger the Event from code. For more information, see [Trigger a Custom Scripting Event from a C# script](vs-create-own-custom-event-node-trigger-code.md).
|
||
|
||
## Create a node and add it to the fuzzy finder
|
||
|
||
To create a Custom Scripting Event Sender node and add it to the fuzzy finder:
|
||
|
||
1. [!include[open-project-window](./snippets/vs-open-project-window.md)]
|
||
|
||
1. [!include[right-click-project](./snippets/custom-events/vs-right-click-project.md)]
|
||
|
||
1. [!include[create-c-script-project](./snippets/vs-create-c-script-project.md)]
|
||
|
||
1. Enter a name, such as `SendMyEventNode`, for the new script file.
|
||
|
||
1. Press Enter.
|
||
|
||
1. [!include[open-new-external-code](./snippets/vs-open-new-external-code.md)]
|
||
|
||
1. In your external editor, copy and paste the following code into the C# script:
|
||
|
||
```csharp
|
||
using Unity.VisualScripting;
|
||
using UnityEngine;
|
||
|
||
//Custom node to send the Event
|
||
[UnitTitle("Send My Custom Event")]
|
||
[UnitCategory("Events\\MyEvents")]//Setting the path to find the node in the fuzzy finder as Events > My Events.
|
||
public class SendMyEvent : Unit
|
||
{
|
||
[DoNotSerialize]// Mandatory attribute, to make sure we don’t serialize data that should never be serialized.
|
||
[PortLabelHidden]// Hide the port label, as we normally hide the label for default Input and Output triggers.
|
||
public ControlInput inputTrigger { get; private set; }
|
||
[DoNotSerialize]
|
||
public ValueInput myValue;
|
||
[DoNotSerialize]
|
||
[PortLabelHidden]// Hide the port label, as we normally hide the label for default Input and Output triggers.
|
||
public ControlOutput outputTrigger { get; private set; }
|
||
|
||
protected override void Definition()
|
||
{
|
||
|
||
inputTrigger = ControlInput(nameof(inputTrigger), Trigger);
|
||
myValue = ValueInput<int>(nameof(myValue),1);
|
||
outputTrigger = ControlOutput(nameof(outputTrigger));
|
||
Succession(inputTrigger, outputTrigger);
|
||
}
|
||
|
||
//Send the Event MyCustomEvent with the integer value from the ValueInput port myValueA.
|
||
private ControlOutput Trigger(Flow flow)
|
||
{
|
||
EventBus.Trigger(EventNames.MyCustomEvent, flow.GetValue<int>(myValue));
|
||
return outputTrigger;
|
||
}
|
||
}
|
||
```
|
||
1. [!include[save-script](./snippets/vs-save-script.md)]
|
||
|
||
1. [!include[return-unity](./snippets/vs-return-unity.md)]
|
||
|
||
1. [!include[regen-node-library](./snippets/vs-regen-node-library.md)]
|
||
|
||
After you regenerate your Node Library, the Custom Scripting Event Sender node appears in the fuzzy finder. If you didn't change the `[UnitCategory]` or `[UnitTitle]` from the sample code, then the fuzzy finder displays the node under **Events** > **MyEvents**, as the **Send My Custom Event** node. For more information on the fuzzy finder, see [The interface](vs-interface-overview.md#the-fuzzy-finder).
|
||
|
||
## Trigger your Custom Scripting Event node
|
||
|
||
You might use your **Send My Custom Event** node to trigger your Event based on keyboard input:
|
||
|
||
1. [Open a Script Graph](vs-open-graph-edit.md) where you want to add the new node. This can be the same or a different Script Graph from the one that contains your Custom Scripting Event node.
|
||
|
||
2. [!include[open-fuzzy-finder](./snippets/vs-open-fuzzy-finder.md)].
|
||
|
||
1. Go to **Events** > **Input**.
|
||
|
||
1. Select the **On Keyboard Input** node to add it to the graph.
|
||
|
||
3. Right-click again in the Graph Editor to open the fuzzy finder.
|
||
|
||
1. Go to **Events** > **My Events**.
|
||
|
||
1. Select your **Send My Custom Event** node to add it to the graph.
|
||
|
||
4. Connect the **On Keyboard Input** node's Trigger output port to the **Send My Custom Event** node's Input Trigger input port, as shown in the following image.
|
||
|
||
![An image of the Graph Editor. An On Keyboard Input node with its Key set to Space and its Action set to Up connects to the Send My Custom Event node.](images/vs-custom-event-send-my-custom-event-node-keyboard.png)
|
||
|
||
5. Select **Play** from [the Unity Editor's Toolbar](https://docs.unity3d.com/Manual/Toolbar.html) to enter Play mode.
|
||
|
||
1. Press and release the Spacebar in the [Game view](https://docs.unity3d.com/Manual/GameView.html).
|
||
|
||
The Custom Scripting Event Sender node triggers the Custom Scripting Event in your graph and sends the Event the value from **My Value A**.
|
||
|
||
|
||
## Next steps
|
||
|
||
After you create a Custom Scripting Event Sender node, you can [create a script to trigger your Event from code](vs-create-own-custom-event-node-trigger-code.md) or [create a script to listen to your Event](vs-create-own-custom-event-listen-code.md).
|