Existe uma maneira super simples de alterar eventos:
EDITAR
Veja minha outra resposta para a maneira rápida e fácil de adicionar um evento apenas para o OnClick
evento. Para outros eventos, como OnDrag
veja abaixo.
Além disso, se você precisar de mais do que apenas os eventos fornecidos por padrão, sugiro anexar um EventTrigger
ao seu objeto de jogo. Isso nos dá acesso ao BaseEventData
objeto retornado do evento, informando coisas como o objeto que criou o evento. Então você pode fazer algo como:
//Create an event delegate that will be used for creating methods that respond to events
public delegate void EventDelegate(UnityEngine.EventSystems.BaseEventData baseEvent);
Em seguida, podemos criar um método para manipular eventos, a assinatura deve corresponder à do nosso delegado. Portanto, ele precisa retornar void
e aceitar BaseEventData
como seu primeiro e único parâmetro:
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.
}
Por fim, para adicionar dinamicamente o evento:
//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);
Se você estiver usando a versão 5.3.3 ou superior, use esta linha em vez da última linha acima, delegados será depreciado :
eventTrigger.triggers.Add(entry);
A palavra é que a
delegate{}
sintaxe encontrada na minha resposta anterior é obsoleta, existe outra maneira de fazer isso usando a notação lambda:Ou você pode passar o botão para tornar as coisas um pouco mais dinâmicas:
fonte
OnClick
evento. Para adicionar outros eventos dinamicamente, você precisa seguir as instruções na minha outra resposta.Crie um novo script, ao longo das linhas de:
Este script implementa na interface IPointerClickHandler (entre muitas outras interfaces disponíveis ). Simplesmente anexar esse script a um elemento da interface do usuário permitirá que ele intercepte eventos de clique (ou qualquer outro evento para o qual você implemente a interface).
A próxima etapa é simplesmente adicionar dinamicamente esse script como um componente ao elemento da interface do usuário que você deseja:
Isso adicionará o script como um componente
myButton
e, na próxima vez que clicar no botão, obterá informações sobre qual botão foi clicado e onde o clique ocorreu.Isso fornece mais informações sobre o evento em comparação com minhas outras respostas.
fonte
Como a unidade implementa a interface do usuário é como qualquer outro componente da unidade. Você adiciona GameObject e anexa componentes de interface do usuário a ele. Depois de ter o objeto do jogo, você pode obter os componentes da interface do usuário e alterar as propriedades.
A referência da API para interface do usuário pode ser encontrada no namespace UnityEngine.UI, a referência da API para BUtton é http://docs.unity3d.com/ScriptReference/UI.Button.html
Consulte a publicação http://blog.trsquarelab.com/2015/03/new-ui-implementation-using-c-scripts.html para obter mais informações sobre como acessar a interface do usuário a partir de scripts C #
fonte