Signals allow you to communicate between decoupled parts of the game in Unity3d. The work with signals is very straightforward and can be shown in few steps:
- Step 1 - Write a signal. It's a plain struct.
public struct SignalExampleDamage
{
public GameObject go;
public int damage;
}
- Step 2 - Inherit from IRecieve a class where you want your signal to be received.
public class ExampleClassReciever : MonoBehaviour, IReceive<SignalExampleDamage>
{
private void OnEnable()
{
// Add this object to ProcessingSignals.Default
ProcessingSignals.Default.Add(this);
}
private void OnDisable()
{
// Remove this object from ProcessingSignals.Default. You don't want this object to receive signals anymore!
ProcessingSignals.Default.Remove(this);
}
// This method will work when the signal is received.
public void HandleSignal(SignalExampleDamage arg)
{
Debug.Log(string.Format("{0} deals {1} damage!", arg.go, arg.damage));
}
}
- Step 3 - Create a new signal and send it through ProcessingSignals.Default
public class ExampleClass : MonoBehaviour {
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// create new signal
SignalExampleDamage signalExample;
signalExample.damage = Random.Range(1, 10);
signalExample.go = gameObject;
// send signal to the processor
ProcessingSignals.Default.Send(signalExample);
}
}
}
- Foldout groups - an extension to add foldable groups to the inspector.
- ACTORS - Unity3d data-driven framework I'm currently working on. Signals work as part of the framework.