- Home /
NullReferenceException when using messaging system
Hello everyone, I decided to implement a simple messaging system into my project. I'm using this one: CSharpMessenger Extended (it's implemented with static methods).
It's very strange that when I call a method directly everything is working correctly. But when I broadcast a message with the messaging system I get a NullReferenceException on some of the game objects. To my surprise adding the line if (_gameObject == null) return;
solves the problem. However it's not an option to add a check if the object is null to every place where I get this exception.
What might be the problem?
Here's my code for broadcasting a message:
public class Head : MonoBehaviour {
public Snake snake;
void OnControllerColliderHit (ControllerColliderHit hit)
{
if ( hit.gameObject.GetComponent<Terrain>() )
return;
//This way everything was working without any surprises.
//snake.PropCollected( hit.gameObject.GetComponent<Prop>() );
//Using messaging system instead
if ( hit.gameObject.GetComponent<Prop>() )
Messenger<Prop>.Broadcast( "prop collected", hit.gameObject.GetComponent<Prop>() );
Destroy(hit.gameObject);
}
}
Here's how I subscribe to the event and respond to it:
public class Snake : MonoBehaviour {
public GameObject headBlock;
public GameObject snakeBlocks;
int lastSnakeBlockId;
private GameObject FindBlockWithId( int _id )
{
if (!snakeBlocks) return null; //This line somehow solves the problem; However the object is 100% assigned in the editor.
foreach (Transform child in snakeBlocks.transform) {
if (child.gameObject.GetComponent<SnakeBlockScript>().blockId == _id)
{
return child.gameObject;
}
}
return headBlock;
}
void Awake()
{
//Set up message listeners
Messenger<Prop>.AddListener("prop collected", AddBlock);
}
public void AddBlock(Prop _prop)
{
GameObject lastBlock = FindBlockWithId(lastSnakeBlockId - 1);
if (!lastBlock) return;
//Some more code
//...
}
}
Thank you!
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Can't load Mouse Cursor texture 1 Answer
RaycastHit2D not interacting with tags 1 Answer
NullReferenceException and m_InstanceID == 0 on LoadLevel (C#) 1 Answer