Basic event bus for unity
- Simple
- Structs for events - no garbage
- Binding based or direct subscription, no interfaces
- High performance
Create new struct, assign IEvent
interface
public struct TestEvent : IEvent
{
public string a;
public float b;
}
EventBus<TestEvent>.Raise(new TestEvent()
{
b = 7,
a = "Hello"
});
Check EventBusExample.cs
- Declare an event binding object
public class EventBusTest : MonoBehaviour
{
EventBinding<TestEvent> _onTestEvent;
- Initialize it in Awake/Start/Ctor
private void Awake()
{
_onTestEvent = new EventBinding<TestEvent>(OnEvent);
// Add couple more listeners to the same binding
_onTestEvent.Add(onEventButPrintTheStringInstead);
_onTestEvent.Add(someUnrelatedMethodWithoutArgs);
EventBus<TestEvent>.Raise(new TestEvent()
{
a = "Hello"
});
_onTestEvent.Remove(onEventButPrintTheStringInstead);
_onTestEvent.Remove(someUnrelatedMethodWithoutArgs);
// Callback will be called precisely once, then dropped
EventBus<TestEvent>.AddCallback(SomeRandomMethod);
StartCoroutine(CoroutineThatDispatchesEventAfterSomeTime());
StartCoroutine(CoroutineThatWaitsForEvent());
}
- Control observing state through
Listen
private void OnEnable()
{
_onTestEvent.Listen = true;
}
private void OnDisable()
{
_onTestEvent.Listen = false;
}