When events can be based on distance or collisions, we can use
OnTrigger methods as described in the preceding recipe. When events are based on time periods, we can use coroutines, as described in a later recipe in this chapter. When there are other kinds of events, we can use C# delegates and events, as described in this recipe. These work in a similar way to
SendMessage(), but are much more efficient, since Unity has a defined list of the objects "listening" to the broadcast events.
SendMessage() should be avoided, since it means Unity has to analyze each scripted object ("reflect over" the object) to see whether there is a public method corresponding to the message that ...