Need help with EventTriggers

The problem i’m having is that we want to run en Editor Script that would generate all the level play buttons for a given number of levels. We are using EventTriggers to call LoadLevel(int level) function witch then loads a level.
Here is the code:

[MenuItem("Custom/Add Event Trigger", false, 12)]
    public static void AddEventTrigger()
    {
        GameObject temp = GameObject.Find ("PlayButton");
        temp.AddComponent<EventTrigger> ();
        AddEventTriggerListener (temp.GetComponent<EventTrigger> (), EventTriggerType.PointerClick, 5);
    }

    public static void AddEventTriggerListener(EventTrigger trigger,
        EventTriggerType eventType,
        int levelToLoad)
    {
        LevelController levelController = GameObject.Find ("Level Controller").GetComponent<LevelController> ();
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = eventType;
        entry.callback = new EventTrigger.TriggerEvent ();
        entry.callback.AddListener( (eventData) => { levelController.LoadLevel(levelToLoad); } );
        trigger.triggers.Add(entry);
    }

The problem is that when the EventTrigger is added to the object the on click is empty like this

That list only shows persistent event subscribers, not ones added by the runtime api. Persistent ones are those that are serialised into the scene. If you want to add a persistent listener you need to use this, its editor only;

Yes i used it to add functions to Buttons on click but couldn’t figure it out for EventTriggers can you give me en example?

The code i used for the button :

UnityEventTools.AddPersistentListener (GameObject.Find ("StartButton").GetComponent<Button> ().onClick, GameObject.Find ("GameControllers").GetComponent<GameControllerMenu> ().LogoHolderStartBtn);

this code is called from en EditorScript.

I am having this problem as well, does anyone know how to assign callback function to Event Trigger via custom Editor script?

I finally figured out how to add persistent listener to Event Trigger through Editor script!

EventTrigger trigger = Find("yourEventTrigger").GetComponent<EventTrigger>();
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerDown;
UnityEventTools.AddVoidPersistentListener(entry.callback, new UnityAction(YourCallback));
trigger.triggers.Clear();
trigger.triggers.Add(entry);
4 Likes