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).

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);
}
}