Есть супер простой способ изменить события:
РЕДАКТИРОВАТЬ
Смотрите мой другой ответ для быстрого и простого способа добавить событие только для OnClick
события. Для других событий, как OnDrag
см. Ниже.
Кроме того, если вам нужно больше, чем просто события, предоставляемые по умолчанию, я бы предложил вместо этого присоединить объект EventTrigger
к вашему игровому объекту. Это дает нам доступ к BaseEventData
объекту, возвращенному из события, сообщая нам такие вещи, как объект, который создал событие. Тогда вы можете сделать что-то вроде:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Затем мы можем создать метод для обработки событий, подпись должна соответствовать подписи нашего делегата. Таким образом, он должен вернуть void
и принять в BaseEventData
качестве своего первого и единственного параметра:
public void DropEventMethod(UnityEngine.EventSystems.BaseEventData baseEvent) {
Debug.Log(baseEvent.selectedObject.name + " triggered an event!");
//baseEvent.selectedObject is the GameObject that triggered the event,
// so we can access its components, destroy it, or do whatever.
}
Наконец, чтобы динамически добавить событие:
//Get the event trigger attached to the UI object
EventTrigger eventTrigger = buttonObject.GetComponent<EventTrigger>();
//Create a new entry. This entry will describe the kind of event we're looking for
// and how to respond to it
EventTrigger.Entry entry = new EventTrigger.Entry();
//This event will respond to a drop event
entry.eventID = EventTriggerType.Drop;
//Create a new trigger to hold our callback methods
entry.callback = new EventTrigger.TriggerEvent();
//Create a new UnityAction, it contains our DropEventMethod delegate to respond to events
UnityEngine.Events.UnityAction<BaseEventData> callback =
new UnityEngine.Events.UnityAction<BaseEventData>(DropEventMethod);
//Add our callback to the listeners
entry.callback.AddListener(callback);
//Add the EventTrigger entry to the event trigger component
eventTrigger.delegates.Add(entry);
Если вы используете версию 5.3.3 или выше, используйте эту строку вместо последней строки выше, делегаты не рекомендуются :
eventTrigger.triggers.Add(entry);
Слово в том, что
delegate{}
синтаксис, найденный в моем предыдущем ответе, устарел, есть другой способ сделать это с помощью лямбда-нотации:Или вы можете передать кнопку, чтобы сделать вещи немного более динамичными:
источник
OnClick
мероприятия. Для того, чтобы динамически добавлять другие события, вы должны следовать инструкциям в моем другом ответе.Создайте новый скрипт в соответствии с:
Этот скрипт реализует в интерфейсе IPointerClickHandler (среди многих других доступных интерфейсов ). Простое присоединение этого сценария к элементу пользовательского интерфейса позволит этому сценарию перехватывать события щелчка (или любое другое событие, для которого вы реализуете интерфейс).
Следующий шаг - просто динамически добавить этот скрипт в качестве компонента к нужному элементу пользовательского интерфейса:
Это добавит скрипт в качестве компонента,
myButton
и в следующий раз, когда я нажму кнопку, я получу информацию о том, какая кнопка была нажата и где произошел щелчок.Это дает больше информации о событии по сравнению с другими моими ответами.
источник
То, как единство реализует пользовательский интерфейс, точно так же, как и любые другие компоненты единства. Вы добавляете GameObject и присоединяете к нему компоненты пользовательского интерфейса. Если у вас есть игровой объект, вы можете получить из него компоненты пользовательского интерфейса и изменить свойства.
Ссылку API для пользовательского интерфейса можно найти в пространстве имен UnityEngine.UI, ссылку API для BUtton - http://docs.unity3d.com/ScriptReference/UI.Button.html.
См. Пост http://blog.trsquarelab.com/2015/03/new-ui-implementation-using-c-scripts.html для получения дополнительной информации о доступе к пользовательскому интерфейсу из сценариев C #
источник