Skip to content

Instantly share code, notes, and snippets.

@stramit
Created September 4, 2014 06:16
  • Star 56 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save stramit/76e53efd67a2e1cf3d2f to your computer and use it in GitHub Desktop.
Sending Custom Events via the EvenSystem
using System;
using System.Collections.Generic;
using UnityEngine.Events;
// interface you implement in your MB to receive events
public interface ICustomHandler : IEventSystemHandler
{
void OnCustomCode(CustomEventData eventData);
}
// Custom data we will send via the event system
public class CustomEventData : BaseEventData
{
public string m_CustomData;
public CustomEventData(EventSystem eventSystem, string customData)
: base(eventSystem)
{
m_CustomData = customData;
}
}
// container class that holds the execution logic
// called by the event system to delecate the call to
// the intercea
public static class MyCustomEvents
{
// call that does the mapping
private static void Execute(ICustomHandler handler, BaseEventData eventData)
{
// The ValidateEventData makes sure the passed event data is of the correct type
handler.OnCustomCode (ExecuteEvents.ValidateEventData<CustomEventData> (eventData));
}
// helper to return the functor that should be invoked
public static ExecuteEvents.EventFunction<ICustomHandler> customEventHandler
{
get { return Execute; }
}
}
//Custom input module that can send the events
public class MyInputModule : BaseInputModule
{
// list of objects to invoke on
public GameObject[] m_TargetObjects;
// called each tick on active input module
public override void Process()
{
// if we don't have targets return
if (m_TargetObjects == null || m_TargetObjects.Length == 0)
return;
// for each target invoke our custom event
foreach (var target in m_TargetObjects)
ExecuteEvents.Execute (target, new CustomEventData (eventSystem, "Custom Data"), MyCustomEvents.customEventHandler);
}
}
// Class that implements the Handler
public class MyCustomMB : MonoBehaviour, ICustomHandler
{
public void OnCustomCode(CustomEventData eventData)
{
Debug.Log (eventData.m_CustomData);
}
}
@oferei
Copy link

oferei commented Oct 5, 2015

Thanks a lot for this!

@aggsol
Copy link

aggsol commented Nov 6, 2015

👍

@sstrohkorb
Copy link

On line 57, where the event is executed, where does 'eventSystem' come from? Where is it defined?

@chadobado
Copy link

@sstrohkorb it is inherited from BaseInputModule

@ledaC
Copy link

ledaC commented Apr 28, 2017

Can someone explain this to me more clearly like delegate-event? I can somewhat understand this by that kind point of view. The MyInputModule is the trigger; MyCustomEvent is the event; CustomEventData is the event data; ICustomHandler is the delegate i think and MyCustomMB is the listener right? If that so, where the heck ICustomHandler handler parameter in Excute method came from so the handler.OnCustomCode could be executed? as far as i know interface must be initialized first so it would know which method from which class will be executed.

@MrFJ
Copy link

MrFJ commented Sep 27, 2017

Thanks, this helped a lot! Look for "3D EventTrigger", or whatever I decide to call it, on the asset store (probably free) in a few weeks!
image

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment