How to Prevent Duplicate Event Listeners in Unity: A C# Solution
One way to avoid repeat adding the event listener when calling 'AddListener()' again is to remove the existing event listeners before adding new ones. Here's an updated version of the code that removes the previous event listeners before adding new ones:
private void AddListener()
{
// Get all the buttons in the scene
buttons = FindObjectsOfType<UIButton>(true);
// Remove existing event listeners for each button
foreach (var button in buttons)
{
var eventTrigger = button.GetComponent<EventTrigger>();
if (eventTrigger != null)
{
var pointerEnter = eventTrigger.triggers.Find(entry => entry.eventID == EventTriggerType.PointerEnter);
if (pointerEnter != null)
{
eventTrigger.triggers.Remove(pointerEnter);
}
}
}
// Add event listeners for each button
foreach (var button in buttons)
{
button.gameObject.AddComponent<EventTrigger>();
var eventTrigger = button.GetComponent<EventTrigger>();
// Add pointer enter event listener
var pointerEnter = new EventTrigger.Entry();
pointerEnter.eventID = EventTriggerType.PointerEnter;
pointerEnter.callback.AddListener((data) => { OnButtonPointerEnter(button); });
eventTrigger.triggers.Add(pointerEnter);
}
}
This updated code first removes the existing 'PointerEnter' event listener from each button's 'EventTrigger' component, if it exists. Then, it adds the new 'PointerEnter' event listener to each button.
原文地址: https://www.cveoy.top/t/topic/pChv 著作权归作者所有。请勿转载和采集!