Hello, on Unity - Manual: Define binding mode and update trigger Unity suggests: " Don’t keep binding types per-element state. You can use a binding instance across multiple elements and properties simultaneously. During updates and callbacks, the binding system passes in a context object that contains the target element, binding ID, and relevant data. You can use this context object to store the per-element state"
I have an enum, “GameState”, which needs to control the DisplayStyle for several elements.
Are there any examples of how to use a data binding with multiple properties / elements I can follow? I’m having trouble figuring out what the “right” way to accomplish this is. This is what I have so far, and it works, but feels incorrect:
[CreateProperty]
public DisplayStyle FinalizePathButtonDisplayStyle =>
CurrentState == WipeoutGameState.CREATING_PATH && _gridController?.pathIsComplete == true
? DisplayStyle.Flex
: DisplayStyle.None;
[CreateProperty]
public DisplayStyle BuildHeaderDisplayStyle =>
CurrentState != WipeoutGameState.CREATING_PATH
? DisplayStyle.Flex
: DisplayStyle.None;
[CreateProperty]
public DisplayStyle StartWaveDisplayStyle =>
CurrentState == WipeoutGameState.ADDING_OBSTACLES
? DisplayStyle.Flex
: DisplayStyle.None;
...
DataBinding displayFinalizePathBinding = new DataBinding
{
bindingMode = BindingMode.ToTarget,
dataSourcePath = new PropertyPath(nameof(FinalizePathButtonDisplayStyle)),
updateTrigger = BindingUpdateTrigger.OnSourceChanged,
};
_finalizePathButton.SetBinding("style.display", displayFinalizePathBinding);
DataBinding buildHeaderBinding = new DataBinding
{
bindingMode = BindingMode.ToTarget,
dataSourcePath = new PropertyPath(nameof(BuildHeaderDisplayStyle)),
updateTrigger = BindingUpdateTrigger.OnSourceChanged,
};
_buildHeader.SetBinding("style.display", buildHeaderBinding);
var startWaveBinding = new DataBinding
{
bindingMode = BindingMode.ToTarget,
dataSourcePath = new PropertyPath(nameof(StartWaveDisplayStyle)),
updateTrigger = BindingUpdateTrigger.OnSourceChanged,
};
_startWaveButton.SetBinding("style.display", startWaveBinding);