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; }