public static void ApplyBindingOverride(this InputAction action, int bindingIndex, InputBinding bindingOverride)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var indexOnMap = action.BindingIndexOnActionToBindingIndexOnMap(bindingIndex);

            bindingOverride.action = action.name;
            ApplyBindingOverride(action.GetOrCreateActionMap(), indexOnMap, bindingOverride);
        }
        public static void ApplyBindingOverride(this InputActionMap actionMap, int bindingIndex, InputBinding bindingOverride)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException(nameof(actionMap));
            }
            var bindingsCount = actionMap.m_Bindings?.Length ?? 0;

            if (bindingIndex < 0 || bindingIndex >= bindingsCount)
            {
                throw new ArgumentOutOfRangeException(nameof(bindingIndex),
                                                      $"Cannot apply override to binding at index {bindingIndex} in map '{actionMap}' with only {bindingsCount} bindings");
            }

            actionMap.m_Bindings[bindingIndex].overridePath         = bindingOverride.overridePath;
            actionMap.m_Bindings[bindingIndex].overrideInteractions = bindingOverride.overrideInteractions;
            actionMap.LazyResolveBindings();
        }