Common Scripting Pitfalls

From Unify Community Wiki
Revision as of 08:53, 28 April 2006 by NCarter (Talk | contribs)

Jump to: navigation, search

SendMessage and BroadcastMessage

When sending messages, you may find that you sometimes receive the following error messages, even though you're already using SendMessageOptions.DontRequireReceiver to indicate that the message doesn't need to be implemented:

  • SendMessage SomeCoolFunction has no receiver!
  • BroadcastMessage SomeCoolFunction has no receiver!

This may be caused by lines of code such as the following:

<csharp>someGameObject.SendMessage("SomeCoolFunction", SendMessageOptions.DontRequireReceiver);</csharp>

It looks correct, but in fact, we're calling the wrong version of GameObject.SendMessage(). Instead of telling it that we don't require a receiver, we're actually sending the value SendMessageOptions.DontRequireReceiver to SomeCoolFunction() as its function parameter.

The correct form of this method call looks like this:

<csharp>someGameObject.SendMessage("SomeCoolFunction", null, SendMessageOptions.DontRequireReceiver);</csharp>

This time, we're calling the version of GameObject.SendMessage() which has three parameters, and the second parameter is set to 'null'. That means that 'null' is passed to SomeCoolFunction() and the SendMessageOptions.DontRequireReceiver option is correctly interpreted by SendMessage.

This is a common pitfall when writing code that is messaging objects that may not have a receiver.

Personal tools