Skip to content

Delegates

JasonJonesLASM edited this page Jun 28, 2021 · 29 revisions

Delegates are a way to create and invoke methods by reference. As the name suggests, a Delegates main intention is to delegate the behavior amongst one or many other methods. This allows one variable to bind and unbind other matching methods, then invoke them based on that single reference. These can be created and bound at runtime, to switch and assign new behavior to variables and third party scripts. This is perfect for modularity and abstraction!

You may have seen some inaccessible ports before. Perhaps, labeled as "callback", "getter", "setter", "On Click", and so forth. The only way to utilize these, are to create a C# script for them. We have developed a set of units and a wrapper that does this for you. You create a Delegate Asset that can generate native C# wrappers that the delegate units use.

There are two types of delegates:

Actions - A delegate with no return values. These must be a type of void.

Funcs - A delegate with a return value.

Each delegate has a Delegate Unit, an Invoke Unit, and a Bind and Unbind Unit. These units are auto populated into the Community > Control > Delegates folder in the Fuzzy Finder, under the delegate types Namespace.

Creating a Delegate Type

It is important that all delegates work on all platforms. Generating to C# was the best option to ensure complete AOT safety without jumping through hoops. Therefore, you must first create a new delegate asset to compile a wrapper, for use in graphs.

In the Project Window, right click and select Visual Scripting > Community > Delegate

Delegates

Selecting a type will be based on what units you are using, and their requirements.

If a type has generic parameters, you will be required to fill out each parameter below the type.

Delegate With Constraint

If you are satisfied with what you've done, you may compile using the Compiler Utility.

Clone this wiki locally