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