มีวิธีที่ง่ายที่สุดในการเปลี่ยนกิจกรรม:
แก้ไข
ดูคำตอบอื่น ๆ ของฉันสำหรับวิธีที่ง่ายและรวดเร็วในการเพิ่มกิจกรรมสำหรับ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);