Как получить доступ к динамическим данным baseevent из скрипта C# с помощью EventTrigger, Unity?

#c# #unity3d #onclick #onclicklistener #eventtrigger

Вопрос:

У меня здесь есть код, в котором я хочу вызвать функцию, когда произойдет щелчок указателя.

 EventTrigger trigger = instance.AddComponent<EventTrigger>();
var pointerClick = new EventTrigger.Entry();
pointerClick.eventID = EventTriggerType.PointerClick;
pointerClick.callback.AddListener(delegate { UIController.Click(???); });
trigger.triggers.Add(pointerClick);
 

Теперь я хочу знать, был ли щелчок левым или правым.
Код из этой темы: https://forum.unity.com/threads/how-to-detect-handle-right-click.355146/

 public void Click(BaseEventData bed)
{
        PointerEventData ped = (PointerEventData)bed;
        Debug.Log("Button: "   ped.pointerId);

        // pointerId will be -1 for left mouse button, -2 for right
}
 

(Основываясь на результате, я должен вызвать другие методы — здесь это просто не важно.)

Проблема в том, что я не знаю, как ввести BaseEventData аргумент для функции.
Я знаю, в инспекторе есть динамические данные BaseEventData, но в скрипте?

Что подавать в качестве входного аргумента ( BaseEventData bed для Click() )?

Спасибо за вашу помощь!

Ответ №1:

Вы можете объявить UIController.Нажмите следующим образом:

 public void Click( BaseEventData bed )
{
    // ...
}
 

Затем: pointerClick.callback.AddListener( UIController.Click );

Чтобы определить нажатую кнопку, используйте свойство кнопки PointerEventData, а НЕ свойство pointerId:

 if( ped.button == PointerEventData.InputButton.Left )
{
    // Left clicked
}
 

Комментарии:

1. Большое спасибо!

2. В случае, если у Click() есть другие аргументы, как передать их из места вызова?

3. pointerClick.callback.AddListener( (bed) => UIController.Click( bed, otherArguments ) ); . Вы даже можете передать только нажатую кнопку ( bed.button ), а не все данные baseevent. Обратите внимание, что вы не можете удалить этот прослушиватель с помощью removeListener.