Remove .clicked bindings from UI buttons in Unity

36 Views Asked by At

I'm creating UI elements on the fly from UXML templates, and attaching click events to generated buttons. Like this:

public VisualTreeAsset foobahTemplate;
VisualElement foobah = foobahTemplate.Instantiate();
foobah.Q<Button>(name: "foobahButton").clicked += () => { foobahClick("foo", "bah"); };

This works, and I'm guessing because of the += operator you can effectively bind multiple events this way to the same click. I quite like the logic there.

But how would I go about replacing a binding? I assume -= removes the same as += adds, but since the binding is of an anonymous function via the lambda syntax, I don't understand how you'd later pluck a particular event out to unbind?

For example, if doing this:

foobah.Q<Button>(name: "foobahButton").clicked += () => { foobahClick1("lorem", "ipsum"); };
foobah.Q<Button>(name: "foobahButton").clicked += () => { foobahClick2("dolor", "sit"); };
foobah.Q<Button>(name: "foobahButton").clicked += () => { foobahClick3("amet", "consectetur"); };

How would I later unbind the foobahclick2() call leaving foobahclick1() and foobahclick3() in place, or replace it with say, foobahClick2("adipiscing", "elit");?

0

There are 0 best solutions below