SerializableCallback
UnityEvent and System.Func had a child. Lets you drag-and-drop methods with or without return values / parameters in the Unity inspector. It uses expression trees and reflection to cache a delegate on first execution. Usage is identical to UnityEvent
com.github.siccity.serializablecallback 
Install via UPM
Add to Unity Package Manager using this URL
https://www.pkglnk.dev/serializablecallback.git README Markdown
Copy this to your project's README.md
## Installation
Add **SerializableCallback** to your Unity project via Package Manager:
1. Open **Window > Package Manager**
2. Click **+** > **Add package from git URL**
3. Enter:
```
https://www.pkglnk.dev/serializablecallback.git
```
[](https://www.pkglnk.dev/pkg/serializablecallback)README
SerializableCallback
Lets you drag-and-drop methods with or without return values / parameters in the Unity inspector. It uses expression trees and reflection to cache a delegate on first execution.
Usage is identical to UnityEvent

public class MyClass : MonoBehaviour {
//These fields are shown in the inspector
public SerializableCallback callback; // supports all non-void return types
public Condition condition; // supports bool return types only
public GetProduct getProduct; // supports MyProduct return types only
void Start() {
// Callbacks can be invoked with or without parameters, and with different types
Debug.Log(callback.Invoke()); // returns object
Debug.Log(condition.Invoke()); // returns bool
Debug.Log(getProduct.Invoke(2)); // returns MyProduct
}
// As with UnityEvents, custom callbacks must have a non-generic wrapper class marked as [Serializable] in order to be serialized by Unity
[Serializable]
public class Condition : SerializableCallback<bool> {}
// Last generic type parameter is the return type, staying consistent with System.Func
[Serializable]
public class GetProduct : SerializableCallback<int, MyProduct> {}
}
| Performance (100000 iterations) | Time |
|---|---|
| bool Method(float) | 00.00304s |
| SerializedCallback<float, bool> (Persistent) | 00.01026s |
| SerializedCallback<float, bool> (Dynamic) | 00.00797s |
Installing with Unity Package Manager
To install this project as a dependency using the Unity Package Manager,
add the following line to your project's manifest.json:
"com.github.siccity.serializablecallback": "git+https://github.com/Siccity/SerializableCallback.git"
Join the Discord server to leave feedback or get support.
No comments yet. Be the first!