Signals is a universal messaging system specially designed for Unity, that uses data streams to send pings, data structures and/or references.
Streams are virtual channels through which signals are being sent. You can have as many streams as you need and they will automatically handle the delivery of signals to all registered listeners.
Send any signal (ping) or meta-signal (a signal with a data or reference payload) through any stream.
Subscribe to any stream to receive the signals being sent through it.
Performance by Design
Automated Pooling System
Performance and memory allocations are among some the most important characteristics of a messaging system.
Signals has an internal automated pooling system that recycles data packets (signals) after they are used.
This architecture provides the optimum design for scalability and reliability, making the system robust, fast and adaptable to various use-cases.
Runtime Consoles
Easy Debuging
Live runtime consoles, the Streams Console and the Signals Console, give real-time insight into what is happening at any given moment.
Streams Console shows all the live streams that have been created at runtime.
Signals Console shows all the signals as they are being sent.
A dynamic filters sub-system helps focus on specific signals.
How Signals works
Intuitive API
Signals has a clean API that makes sending a signal as easy as writing one line of code.
Connecting and disconnecting to/from streams is also easy, both operations are one lines of code as well.
Complex implementations are also an option as Signals provides interfaces to interact with.
//create a new signal receiver
m_Receiver = new SignalReceiver().SetOnSignalCallback(signal => Debug.Log(signal));
//connect to a signal stream to listen for signals
SignalStream.Get("MyStreamCategory", "MyStreamName").ConnectReceiver(m_Receiver);
//disconnect from the signal stream and stop listening for signals
m_Receiver.Disconnect();
//send a ping (signal without a payload)
Signal.Send("MyStreamCategory", "MyStreamName");
//send a signal with a int value payload
MetaSignal.Send("MyStreamCategory", "MyStreamName", 123);
//send a signal with a Vector2 value payload
MetaSignal.Send("MyStreamCategory", "MyStreamName", new Vector2(1, 2));
//send a signal with a GameObject reference payload
MetaSignal.Send("MyStreamCategory", "MyStreamName", gameObject);
// custom payload example class
public class MyData
{
public string Name;
public string Description;
public int Value;
}
...
//send a signal with a custom class payload
MetaSignal.Send("MyStreamCategory", "MyStreamName", new MyData { Name = "Hello World", Description = "Some description", Value = 123 });
Knowledge Unleashed
Documentation
Unlock the power of knowledge with our comprehensive Documentation hub.