From 355f77ce0f34ceff13cb18807126511d9fe226c9 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Thu, 26 Feb 2026 14:15:52 +0100 Subject: [PATCH 01/16] Implementing Save button in input system settings --- .../InputActionsEditorSettingsProvider.cs | 13 ++++++++++++- .../UITKAssetEditor/Views/InputActionsEditorView.cs | 6 ++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index e27c12cc6f..2a6d3ed5d6 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -187,6 +187,17 @@ private void ValidateAndSaveAsset(InputActionAsset asset) EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); } + private void OnSaveAssetRequested() + { + var asset = GetAsset(); + if (asset == null) + return; + if (m_View != null && m_View.IsControlSchemeViewActive()) + return; + ProjectWideActionsAsset.Verify(asset); + EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); + } + private void CreateUI() { var projectSettingsAsset = AssetDatabase.LoadAssetAtPath( @@ -253,7 +264,7 @@ private void BuildUI() if (hasAsset) { m_StateContainer = new StateContainer(m_State, AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset))); - m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, null); + m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, OnSaveAssetRequested); m_StateContainer.Initialize(m_RootVisualElement.Q("action-editor")); } } diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs index d36d82ef78..84b73a53a1 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs @@ -23,6 +23,7 @@ internal class InputActionsEditorView : ViewBase( InputActionsEditorConstants.PackagePath + @@ -53,7 +55,7 @@ public InputActionsEditorView(VisualElement root, StateContainer stateContainer, m_DevicesToolbar.SetEnabled(false); m_SaveButton = root.Q(name: saveButtonId); - m_SaveButton.SetEnabled(InputEditorUserSettings.autoSaveInputActionAssets == false); + m_SaveButton.SetEnabled(m_IsProjectSettings || InputEditorUserSettings.autoSaveInputActionAssets == false); m_SaveButton.clicked += OnSaveButton; var autoSaveToggle = root.Q(name: autoSaveToggleId); @@ -149,7 +151,7 @@ public override void RedrawUI(ViewState viewState) { SetUpControlSchemesMenu(viewState); SetUpDevicesMenu(viewState); - m_SaveButton.SetEnabled(InputEditorUserSettings.autoSaveInputActionAssets == false); + m_SaveButton.SetEnabled(m_IsProjectSettings || InputEditorUserSettings.autoSaveInputActionAssets == false); } private string SetupControlSchemeName(string name) From 826e5a20b2f0eb7fa197e9c0bda8f394073bdd6d Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Thu, 26 Feb 2026 14:21:08 +0100 Subject: [PATCH 02/16] Update InputActionsEditorView.cs --- .../Editor/UITKAssetEditor/Views/InputActionsEditorView.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs index 84b73a53a1..90a08c7668 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs @@ -55,7 +55,7 @@ public InputActionsEditorView(VisualElement root, StateContainer stateContainer, m_DevicesToolbar.SetEnabled(false); m_SaveButton = root.Q(name: saveButtonId); - m_SaveButton.SetEnabled(m_IsProjectSettings || InputEditorUserSettings.autoSaveInputActionAssets == false); + m_SaveButton.SetEnabled(InputEditorUserSettings.autoSaveInputActionAssets == false); m_SaveButton.clicked += OnSaveButton; var autoSaveToggle = root.Q(name: autoSaveToggleId); @@ -151,7 +151,7 @@ public override void RedrawUI(ViewState viewState) { SetUpControlSchemesMenu(viewState); SetUpDevicesMenu(viewState); - m_SaveButton.SetEnabled(m_IsProjectSettings || InputEditorUserSettings.autoSaveInputActionAssets == false); + m_SaveButton.SetEnabled(InputEditorUserSettings.autoSaveInputActionAssets == false); } private string SetupControlSchemeName(string name) From 49d95acf9fcd72506d93af18b4bb66df1331df0d Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Thu, 26 Feb 2026 14:56:39 +0100 Subject: [PATCH 03/16] Update InputActionsEditorView.cs --- .../Editor/UITKAssetEditor/Views/InputActionsEditorView.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs index 90a08c7668..d36d82ef78 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs @@ -23,7 +23,6 @@ internal class InputActionsEditorView : ViewBase( InputActionsEditorConstants.PackagePath + From 2fc1958460ccb25ecb334de431cd6e507d3abfb8 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Thu, 26 Feb 2026 16:04:30 +0100 Subject: [PATCH 04/16] Using Save() method both InputActionsEditorSettingsProvider.cs & InputActionsEditorWindow.cs --- .../InputActionsEditorSettingsProvider.cs | 17 +++----------- .../InputActionsEditorWindow.cs | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index 2a6d3ed5d6..03de8be747 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -183,19 +183,7 @@ private void ValidateAndSaveAsset(InputActionAsset asset) return; } - ProjectWideActionsAsset.Verify(asset); // Ignore verification result for save - EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); - } - - private void OnSaveAssetRequested() - { - var asset = GetAsset(); - if (asset == null) - return; - if (m_View != null && m_View.IsControlSchemeViewActive()) - return; - ProjectWideActionsAsset.Verify(asset); - EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); + InputActionsEditorWindow.Save(AssetDatabase.GetAssetPath(asset), asset); } private void CreateUI() @@ -264,7 +252,8 @@ private void BuildUI() if (hasAsset) { m_StateContainer = new StateContainer(m_State, AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset))); - m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, OnSaveAssetRequested); + m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, () => InputActionsEditorWindow.Save(AssetDatabase.GetAssetPath(asset), asset)); + m_StateContainer.Initialize(m_RootVisualElement.Q("action-editor")); } } diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index 9a6ec57263..c7ee613d7b 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -278,15 +278,27 @@ private InputActionAsset GetEditedAsset() return m_State.serializedObject.targetObject as InputActionAsset; } - private void Save(bool isAutoSave) + /// + /// Saves an InputActionAsset to disk. Use this from both the editor window and the project settings provider. + /// + /// Asset path to save to. + /// The asset to save. + /// True if the asset was written to disk, false if unchanged or save failed. + internal static bool Save(string path, InputActionAsset asset) { - var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); - var projectWideActions = InputSystem.actions; if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) - ProjectWideActionsAsset.Verify(GetEditedAsset()); + ProjectWideActionsAsset.Verify(asset); + + return InputActionAssetManager.SaveAsset(path, asset.ToJson()); + } + + private void Save(bool isAutoSave) + { + var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); + var asset = GetEditedAsset(); - if (InputActionAssetManager.SaveAsset(path, GetEditedAsset().ToJson())) + if (Save(path, asset)) TryUpdateFromAsset(); if (isAutoSave) From e9b0e083eeb6e887abd3d1880e357b6d4053367d Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:58:27 +0100 Subject: [PATCH 05/16] Add asset verification before saving input actions --- .../UITKAssetEditor/InputActionsEditorSettingsProvider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index 03de8be747..af1958c66f 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -183,7 +183,8 @@ private void ValidateAndSaveAsset(InputActionAsset asset) return; } - InputActionsEditorWindow.Save(AssetDatabase.GetAssetPath(asset), asset); + ProjectWideActionsAsset.Verify(asset); // Ignore verification result for save + EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); } private void CreateUI() From e3a124ca123b56cc3dcccd9a43b82a57274faacc Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Tue, 3 Mar 2026 10:34:03 +0100 Subject: [PATCH 06/16] Fix saving InputSystem actions in ProjectSettings Added a fix for saving InputSystem actions in ProjectSettings. --- Packages/com.unity.inputsystem/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.inputsystem/CHANGELOG.md b/Packages/com.unity.inputsystem/CHANGELOG.md index b0d94475a1..15792d7c0f 100644 --- a/Packages/com.unity.inputsystem/CHANGELOG.md +++ b/Packages/com.unity.inputsystem/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- Fixed saving and auto-saving InputSystem actions within the ProjectSettings window [UUM-134035](https://jira.unity3d.com/browse/UUM-134035) - Improved New Input System warning dialog, Native Device Inputs Not Enabled [UUM-132151]. - Fixed caching for InputControlPath display name [ISX-2501](https://jira.unity3d.com/browse/ISX-2501) From 61ef1ef55e7bbc01047c2aeac67d07e962bfeb05 Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:19:51 +0100 Subject: [PATCH 07/16] Remove XML comments from Save method Removed XML documentation comments for the Save method. --- .../Editor/UITKAssetEditor/InputActionsEditorWindow.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index c7ee613d7b..6a0bbb3c1b 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -278,12 +278,6 @@ private InputActionAsset GetEditedAsset() return m_State.serializedObject.targetObject as InputActionAsset; } - /// - /// Saves an InputActionAsset to disk. Use this from both the editor window and the project settings provider. - /// - /// Asset path to save to. - /// The asset to save. - /// True if the asset was written to disk, false if unchanged or save failed. internal static bool Save(string path, InputActionAsset asset) { var projectWideActions = InputSystem.actions; From 65f1767ca2f65732c90e1cc820f72be2f3a4e96f Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:20:34 +0100 Subject: [PATCH 08/16] Refactor Save method position in InputActionsEditorWindow --- .../InputActionsEditorWindow.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index 6a0bbb3c1b..eb596c1c4e 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -278,15 +278,6 @@ private InputActionAsset GetEditedAsset() return m_State.serializedObject.targetObject as InputActionAsset; } - internal static bool Save(string path, InputActionAsset asset) - { - var projectWideActions = InputSystem.actions; - if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) - ProjectWideActionsAsset.Verify(asset); - - return InputActionAssetManager.SaveAsset(path, asset.ToJson()); - } - private void Save(bool isAutoSave) { var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); @@ -301,6 +292,15 @@ private void Save(bool isAutoSave) analytics.RegisterExplicitSave(); } + internal static bool Save(string path, InputActionAsset asset) + { + var projectWideActions = InputSystem.actions; + if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) + ProjectWideActionsAsset.Verify(asset); + + return InputActionAssetManager.SaveAsset(path, asset.ToJson()); + } + private bool HasContentChanged() { var editedAsset = GetEditedAsset(); From 80b37e3499f09807d180ec445f93a3f034acce85 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Tue, 3 Mar 2026 15:57:08 +0100 Subject: [PATCH 09/16] Adding a conditional when projectSettingsWindowIsOpen is NOT open --- .../UITKAssetEditor/InputActionsEditorSettingsProvider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index af1958c66f..af965b462e 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -178,7 +178,8 @@ private void ValidateAndSaveAsset(InputActionAsset asset) // This code should be cleaned up once we migrate the InputControl stuff from ImGUI completely. // Since at that point it stops being a separate window that steals focus. // (See case ISXB-1713) - if (!InputEditorUserSettings.autoSaveInputActionAssets || m_View.IsControlSchemeViewActive()) + var projectSettingsWindowIsOpen = m_IsActivated; + if ((!InputEditorUserSettings.autoSaveInputActionAssets && !projectSettingsWindowIsOpen) || m_View.IsControlSchemeViewActive()) { return; } From f5eea5f4212adc4596f45f1a5d21069ccdb4c3e9 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Tue, 3 Mar 2026 16:11:34 +0100 Subject: [PATCH 10/16] Reverting commit changes --- .../InputActionsEditorSettingsProvider.cs | 3 +-- .../UITKAssetEditor/InputActionsEditorWindow.cs | 15 ++++----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index af965b462e..c5b59a77ee 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -254,8 +254,7 @@ private void BuildUI() if (hasAsset) { m_StateContainer = new StateContainer(m_State, AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset))); - m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, () => InputActionsEditorWindow.Save(AssetDatabase.GetAssetPath(asset), asset)); - + m_View = new InputActionsEditorView(m_RootVisualElement, m_StateContainer, true, null); m_StateContainer.Initialize(m_RootVisualElement.Q("action-editor")); } } diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index eb596c1c4e..ed0fdd4746 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -281,9 +281,11 @@ private InputActionAsset GetEditedAsset() private void Save(bool isAutoSave) { var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); - var asset = GetEditedAsset(); + var projectWideActions = InputSystem.actions; + if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) + ProjectWideActionsAsset.Verify(GetEditedAsset()); - if (Save(path, asset)) + if (InputActionAssetManager.SaveAsset(path, GetEditedAsset().ToJson())) TryUpdateFromAsset(); if (isAutoSave) @@ -292,15 +294,6 @@ private void Save(bool isAutoSave) analytics.RegisterExplicitSave(); } - internal static bool Save(string path, InputActionAsset asset) - { - var projectWideActions = InputSystem.actions; - if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) - ProjectWideActionsAsset.Verify(asset); - - return InputActionAssetManager.SaveAsset(path, asset.ToJson()); - } - private bool HasContentChanged() { var editedAsset = GetEditedAsset(); From 598835e47721aa43df4211ff47d5081362ed8378 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Tue, 3 Mar 2026 16:12:25 +0100 Subject: [PATCH 11/16] Update InputActionsEditorWindow.cs --- .../Editor/UITKAssetEditor/InputActionsEditorWindow.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index ed0fdd4746..bb9a224a11 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -281,6 +281,7 @@ private InputActionAsset GetEditedAsset() private void Save(bool isAutoSave) { var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); + var projectWideActions = InputSystem.actions; if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) ProjectWideActionsAsset.Verify(GetEditedAsset()); From 7c08c13d9edd1a88f3831dcfe71881baf4a98ef6 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Tue, 3 Mar 2026 16:17:14 +0100 Subject: [PATCH 12/16] Update InputActionsEditorWindow.cs --- .../Editor/UITKAssetEditor/InputActionsEditorWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index bb9a224a11..9a6ec57263 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -281,7 +281,7 @@ private InputActionAsset GetEditedAsset() private void Save(bool isAutoSave) { var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); - + var projectWideActions = InputSystem.actions; if (projectWideActions != null && path == AssetDatabase.GetAssetPath(projectWideActions)) ProjectWideActionsAsset.Verify(GetEditedAsset()); From 92fb34b16b483ecfeacc5445bdf0121448674688 Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:51:08 +0100 Subject: [PATCH 13/16] Refactor condition in InputActionsEditorSettingsProvider --- .../UITKAssetEditor/InputActionsEditorSettingsProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index c5b59a77ee..4bf1a81007 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -179,7 +179,7 @@ private void ValidateAndSaveAsset(InputActionAsset asset) // Since at that point it stops being a separate window that steals focus. // (See case ISXB-1713) var projectSettingsWindowIsOpen = m_IsActivated; - if ((!InputEditorUserSettings.autoSaveInputActionAssets && !projectSettingsWindowIsOpen) || m_View.IsControlSchemeViewActive()) + if (m_View.IsControlSchemeViewActive()) { return; } From 13596137466e5b8a83098d2a0d851b8a480340b3 Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:56:04 +0100 Subject: [PATCH 14/16] Remove unused variable in InputActionsEditorSettingsProvider Remove unused variable 'projectSettingsWindowIsOpen'. --- .../Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index 4bf1a81007..87c7dcd2f9 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -178,7 +178,6 @@ private void ValidateAndSaveAsset(InputActionAsset asset) // This code should be cleaned up once we migrate the InputControl stuff from ImGUI completely. // Since at that point it stops being a separate window that steals focus. // (See case ISXB-1713) - var projectSettingsWindowIsOpen = m_IsActivated; if (m_View.IsControlSchemeViewActive()) { return; From 5c2eab52a7c8fa5da75d40e9e51211a39f2def4f Mon Sep 17 00:00:00 2001 From: josepmariapujol-unity <59828124+josepmariapujol-unity@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:11:19 +0100 Subject: [PATCH 15/16] Update CHANGELOG.md --- Packages/com.unity.inputsystem/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/CHANGELOG.md b/Packages/com.unity.inputsystem/CHANGELOG.md index cf43e40133..1eb06e2eca 100644 --- a/Packages/com.unity.inputsystem/CHANGELOG.md +++ b/Packages/com.unity.inputsystem/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed -- Fixed saving and auto-saving InputSystem actions within the ProjectSettings window [UUM-134035](https://jira.unity3d.com/browse/UUM-134035) +- Fixed auto-save not working for Input System actions in Project Settings when both the Project Settings and Input System Actions windows were open [UUM-134035](https://jira.unity3d.com/browse/UUM-134035) - Improved New Input System warning dialog, Native Device Inputs Not Enabled [UUM-132151]. - Fixed caching for InputControlPath display name [ISX-2501](https://jira.unity3d.com/browse/ISX-2501) From 16ff07002f64c04ef0b020ccc68af940b6262828 Mon Sep 17 00:00:00 2001 From: JosepMariaPujol Date: Wed, 4 Mar 2026 16:27:21 +0100 Subject: [PATCH 16/16] Add helpbox to asset assigned as the Project-wide Input Actions --- .../InputActionsEditorWindow.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index 9a6ec57263..bbab29e2d0 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -258,10 +258,28 @@ private void BuildUI() rootVisualElement.Clear(); if (!rootVisualElement.styleSheets.Contains(InputActionsEditorWindowUtils.theme)) rootVisualElement.styleSheets.Add(InputActionsEditorWindowUtils.theme); + + if (IsProjectSettingsWindowInputAsset()) + { + var helpBox = new HelpBox( + "This asset is assigned as the Project-wide Input Actions in Project Settings. Changes here affect input for the entire project.", + HelpBoxMessageType.Info); + rootVisualElement.Add(helpBox); + } + m_View = new InputActionsEditorView(rootVisualElement, m_StateContainer, false, () => Save(isAutoSave: false)); m_StateContainer.Initialize(rootVisualElement.Q("action-editor")); } + private bool IsProjectSettingsWindowInputAsset() + { + var projectWideActions = InputSystem.actions; + if (projectWideActions == null) + return false; + var path = AssetDatabase.GUIDToAssetPath(m_AssetGUID); + return path == AssetDatabase.GetAssetPath(projectWideActions); + } + private void OnStateChanged(InputActionsEditorState newState, UIRebuildMode editorRebuildMode) { DirtyInputActionsEditorWindow(newState);