diff --git a/Assets/Tests/InputSystem/Plugins/PlayerInputTests.cs b/Assets/Tests/InputSystem/Plugins/PlayerInputTests.cs index 2686399225..f25095fefa 100644 --- a/Assets/Tests/InputSystem/Plugins/PlayerInputTests.cs +++ b/Assets/Tests/InputSystem/Plugins/PlayerInputTests.cs @@ -2242,6 +2242,37 @@ public void PlayerInput_WhenOverridingDeviceLayout_LostDeviceShouldBeResolvedAnd Assert.That(playerInput.devices[0], !Is.SameAs(gamepad)); // expected replacement (by design, not a requirement) Assert.That(playerInput.devices[0].name, Is.EqualTo(gamepad.name)); } + + [Test] + [Category("PlayerInput")] + public void PlayerInput_CanJoinPlayersThroughButtonPress_AfterAutoSwitchedPlayerDeleted() + { + var keyboard = InputSystem.AddDevice(); + + var prefab = new GameObject(); + prefab.SetActive(false); + + var prefabPlayerInput = prefab.AddComponent(); + prefabPlayerInput.actions = InputActionAsset.FromJson(kActions); + prefabPlayerInput.neverAutoSwitchControlSchemes = false; + + var player = PlayerInput.Instantiate(prefab); + + var gamepad = InputSystem.AddDevice(); + + Press(gamepad.buttonSouth); + + Object.DestroyImmediate(player); + + var manager = new GameObject(); + manager.SetActive(false); // Delay OnEnable() until we have all components. + + var managerComponent = manager.AddComponent(); + + manager.SetActive(true); + + Press(gamepad.buttonSouth); + } // An action is either // (a) button-like, or diff --git a/Packages/com.unity.inputsystem/CHANGELOG.md b/Packages/com.unity.inputsystem/CHANGELOG.md index e48e3041a8..a2398d25cb 100755 --- a/Packages/com.unity.inputsystem/CHANGELOG.md +++ b/Packages/com.unity.inputsystem/CHANGELOG.md @@ -12,6 +12,7 @@ however, it has to be formatted properly to pass verification tests. ### Fixed - Fixed `ArgumentNullException` when opening the Prefab Overrides window and selecting a component with an `InputAction`. +- Fixed `ArgumentOutOfRangeException` when a Player Input that has been auto switched is deleted, and then a Player Input Manager attempts to join a new player. ## [1.4.3] - 2022-09-23 diff --git a/Packages/com.unity.inputsystem/InputSystem/Utilities/DelegateHelpers.cs b/Packages/com.unity.inputsystem/InputSystem/Utilities/DelegateHelpers.cs index b0c57d1282..ef4d443360 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Utilities/DelegateHelpers.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Utilities/DelegateHelpers.cs @@ -95,7 +95,11 @@ public static bool InvokeCallbacksSafe_AnyCallbackReturnsTrue( try { if (callbacks[i](argument1, argument2)) + { + callbacks.UnlockForChanges(); + Profiler.EndSample(); return true; + } } catch (Exception exception) {