Passing the object as event argument

Hello everyone.
Quick question here, I want, when an envent is triggered, to be able in some way to retreive the insance of the object which triggered the event, from a class which catches that event.

So let’s say, for example that class Character triggers the event OnMove, but there are many instances of Character in the scene, so i want the class (let’s say) MovementManager, which is subscribed to Character.OnMove to know which was the character which actually moved when subscribing to that event.

Thank you very much

1 Answer

1

Ok, lazy me… Figured this out myself.

So for the class triggering the event, you should declare (I’ll use the example I posted in the original question so it’s easier to follow):

public delegate void CharacterEventHandler(GameObject e);
public static event CharacterEventHandler OnMove;

//And this when sending the event
public void SomeRandomMethod() {
    OnMove(this);
}

Then, for the class registering to the event, make sure the method you subscribe to the event is declared like this:

//this method is subscribed to the event
void WhenCharacterMoves(GameObject character) {
    //Here you can refer to the character which move with "character"
}

That’s it, too bad I didn’t look that up myself… Anyway, hope it helps someone

Thanks. This was a huge help. Can I ask where you found this information from? The documentation is so limited right now.

@Lukas_GMC [MSDN][1] is always a good place to start for language related documentation. It contains the official documentation for the C# language. [1]: http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

Sorry I was jumping back and forth between this and the new UnityEvent system. There is very limited docs related to UnityEvents. I finally got it working thanks to [this][1] thread. [1]: http://forum.unity3d.com/threads/assigning-functions-to-event-triggers-at-runtime.263468/