Simple implementation just like java EventBus.
privatevoidStart(){EventBus.Default.Register(this);}privatevoidOnDestroy(){EventBus.Default.Unregister(this);}[Subscribe(ThreadMode.MAIN)]privatevoidHandleEvent(ShootMessagemessage){/* do something when shooting on main thread */}[Subscribe]privatevoidHandleEventSync(ShootMessagemessage){/* do something when shooting in the same thread */}[Subscribe(ThreadMode.BACKGROUND)]privatevoidHandleEventAsync(ShootMessagemessage){/* do something when shooting on background thread */}publicvoidUpdate(){// Trigger event.EventBus.Default.Post(newShootMessage(/*args*/));}[Subscribe(ThreadMode.BACKGROUND)]privatevoidHandleEventAsync(ShootMessagemessage){/* do something when shooting */}publicvoidUpdate(){// Triger event.EventBus.Default.Post(newShootMessage(/*args*/));}