回答:
イベントを変更する非常に簡単な方法があります。
編集
イベントの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{}
、以前の答えで見つかった構文は廃止されているということです。ラムダ表記を使用してこれを行う別の方法があります:
void buttonSetup(Button button) {
//Remove the existing events
button.onClick.RemoveAllListeners();
//Add your new event using lambda notation
button.onClick.AddListener (handleButton);
}
void handleButton() {
Debug.Log("Button pressed!");
}
または、ボタンを渡して、物事をもう少し動的にすることができます。
void buttonSetup(Button button) {
button.onClick.RemoveAllListeners();
//Add your new event
button.onClick.AddListener(() => handleButton(button));
}
void handleButton(Button b) {
Debug.Log("Button '" + b.name + "' pressed!");
}
OnClick
イベント専用です。他のイベントを動的に追加するには、他の回答の指示に従う必要があります。
次の行に沿って、新しいスクリプトを作成します。
public class EventHandler : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Element: " +
eventData.selectedObject.name +
" was clicked at " +
eventData.position.ToString());
}
}
このスクリプトは、IPointerClickHandlerインターフェイス(他の多くの利用可能なインターフェイスの中で)に実装します。このスクリプトをUI要素に添付するだけで、このスクリプトはクリックイベント(またはインターフェイスを実装するイベント)をインターセプトできます。
次のステップでは、このスクリプトをコンポーネントとして動的に必要なUI要素に追加します。
myButton.AddComponent<EventHandler>();
これにより、スクリプトがコンポーネントとして追加されmyButton
、次にボタンをクリックしたときに、どのボタンがクリックされたか、クリックが発生した場所に関する情報が取得されます。
これにより、他の回答と比較してイベントに関するほとんどの情報が提供されます。
ユニティがUIを実装する方法は、他のユニティコンポーネントと同じです。GameObjectを追加し、UIコンポーネントをそれに追加します。ゲームオブジェクトを取得したら、そこからUIコンポーネントを取得して、プロパティを変更できます。
UIのAPIリファレンスはUnityEngine.UI名前空間にあり、BUttonのAPIリファレンスはhttp://docs.unity3d.com/ScriptReference/UI.Button.htmlです
C#スクリプトからUIにアクセスする方法の詳細については、http://blog.trsquarelab.com/2015/03/new-ui-implementation-using-c-scripts.htmlの投稿を参照してください。