How to set EventTrigger parameters by C#?

Hi there.

I’m sure this question was answered before, but I don’t know exactly what I need to searching for to find it.

I want to assign an object and the called function of a EventTrigger component by script (red in the pic below).

82703-seteventtriggerparameters.jpg

Working with…

this.gameobject.getComponent<EventTrigger>().[...]

… wont give me the needed options, it seems.

Hi @Ambrose998800! Do you need to add these at run-time or to be serialized in the editor? If you just need to set them at run-time, they won’t show up in the Inspector, but you can do something like this:

using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using System.Linq;

[RequireComponent (typeof (EventTrigger))]
public class NewBehaviourScript : MonoBehaviour
{
	protected virtual void Start ()
	{
		EventTrigger eventTrigger = GetComponent <EventTrigger> ();
		List<EventTrigger.Entry> triggers = eventTrigger.triggers;
		EventTrigger.Entry clickEventHandler = triggers.FirstOrDefault (
			t => t.eventID == EventTriggerType.PointerClick
		);
		if (clickEventHandler == null)
		{
			clickEventHandler = new EventTrigger.Entry ();
			clickEventHandler.eventID = EventTriggerType.PointerClick;
			triggers.Add (clickEventHandler);
			eventTrigger.triggers = triggers;
		}
		clickEventHandler.callback.AddListener (OnClick);
	}

	public void OnClick (BaseEventData eventData)
	{
		Debug.Log ("Clicked!");
	}
}

If you need to set these in the editor and have them persist, you need to use something like the UnityEventTools class to serialize a persistent event. Given the above script, it would be something like this:

using UnityEditor;
using UnityEditor.Events;
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using System.Linq;

public class NewBehaviourScriptUtility
{
	[MenuItem ("Example/Serialize Event Handler")]
	private static void SerializeEventHandler ()
	{
		if (Selection.activeGameObject == null)
			return;
		NewBehaviourScript nbs = Selection.activeGameObject.GetComponent <NewBehaviourScript> ();
		if (nbs == null)
			return;
		EventTrigger eventTrigger = nbs.GetComponent <EventTrigger> ();
		List<EventTrigger.Entry> triggers = eventTrigger.triggers;
		EventTrigger.Entry clickEventHandler = triggers.FirstOrDefault (
			t => t.eventID == EventTriggerType.PointerClick
		);
		if (clickEventHandler == null)
		{
			clickEventHandler = new EventTrigger.Entry ();
			clickEventHandler.eventID = EventTriggerType.PointerClick;
			triggers.Add (clickEventHandler);
			eventTrigger.triggers = triggers;
		}
		UnityEventTools.AddPersistentListener (clickEventHandler.callback, nbs.OnClick);
	}
}