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( $"Cannot apply override to binding at index {bindingIndex} in map '{actionMap}' with only {bindingsCount} bindings", "bindingIndex"); } actionMap.m_Bindings[bindingIndex].overridePath = bindingOverride.overridePath; actionMap.m_Bindings[bindingIndex].overrideInteractions = bindingOverride.overrideInteractions; actionMap.LazyResolveBindings(); }
/// <summary> /// Apply the given binding override to all bindings in the map that are matched by the override. /// </summary> /// <param name="actionMap"></param> /// <param name="bindingOverride"></param> /// <returns>The number of bindings overridden in the given map.</returns> /// <exception cref="ArgumentNullException"><paramref name="actionMap"/> is <c>null</c>.</exception> /// <exception cref="InvalidOperationException"><paramref name="actionMap"/> is currently enabled.</exception> /// <remarks> /// </remarks> public static int ApplyBindingOverride(this InputActionMap actionMap, InputBinding bindingOverride) { if (actionMap == null) { throw new ArgumentNullException(nameof(actionMap)); } actionMap.ThrowIfModifyingBindingsIsNotAllowed(); var bindings = actionMap.m_Bindings; if (bindings == null) { return(0); } // Go through all bindings in the map and match them to the override. var bindingCount = bindings.Length; var matchCount = 0; for (var i = 0; i < bindingCount; ++i) { if (!bindingOverride.Matches(ref bindings[i])) { continue; } // Set overrides on binding. bindings[i].overridePath = bindingOverride.overridePath; bindings[i].overrideInteractions = bindingOverride.overrideInteractions; ++matchCount; } if (matchCount > 0) { actionMap.LazyResolveBindings(); } return(matchCount); }