Search Unity

Rewired - Advanced Input for Unity

Discussion in 'Assets and Asset Store' started by guavaman, Sep 25, 2014.

  1. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
    Can I directly get the radius value of the joystick push, used to distinguish between walking and running movements, currently I can only calculate by the x and y component root numbers, which has an impact on performance
     
  2. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    I did the same test yesterday when you contacted me for support . It does not happen. Nobody has ever reported the problem you're having either in all the years Control Mapper has existed. Open the Rewired/Examples/ControlMapper/Examples scenes and test it out. I believe something different is happening than it appears as I said in my last email.

    If you don't upgrade, you won't have access to any of the bug fixes or console platform support.
     
    Last edited: Oct 18, 2022
  3. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    I don't understand what you're asking. player.GetAxis will give you the joystick axis if the Action is bound to a joystick axis. There is nothing more to it than that.
     
  4. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
    Thank you for your answer.I can only get the values of the x-axis and y-axis of the stick, but I can't directly get the vector obtained by the combination of x and y?
     
  5. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    There is no performance difference at all between calling player.GetAxis twice for two different Actions or calling player.GetAxis2D once. All Actions represent a 1D value. There is no such thing as a 2D Action in Rewired. To get X and Y you must get the value of both Actions that represent X and Y.
     
    Last edited: Oct 18, 2022
  6. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
  7. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    If your application even initializes Steam through code, Steam will affect input for the entire application. If this is the Unity editor, it will affect it until closed. Steam may or may not need to be running in the background. It could also be some other program or driver you have installed that makes the controller axis act as a mouse.

    I can't tell you what's causing it on your system, but I can tell you what isn't causing it. There's no way possible Rewired could be causing a joystick to return mouse input. It doesn't have that capability. Mice and Controllers are handled very differently by Raw Input, assuming you're using Windows. If you're using Mac, some controllers do act as mice at the OS level. Rewired can't change this behavior. This would be obvious though because the joystick would move the OS mouse cursor.

    You should also verify that the Mouse Controller's axes are actually changing. Debug Information -> Controllers -> Mouse -> Axes. Because if they're not changing on the Controller itself, then you probably just have a mapping problem which you could also discover by using Debug Information to view the Controller Maps in the Player and see what Actions are mapped to what controller elements.
     
  8. jmgek

    jmgek

    Joined:
    Dec 9, 2012
    Posts:
    177
    I just want to make sure there's no better way to handle animation state changes in rewired, than what I custom wrote:
    ```
    Vector3 moveInputVector = Vector3.ClampMagnitude(new Vector3(player.GetAxis("Move Horizontal"), 0f, player.GetAxis("Move Vertical")), 1f);
    characterAnimator.SetBool("isRunning", moveInputVector != Vector3.zero);
    ```
     
  9. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    Rewired has no role in managing state. It simply provides input and you do with that input whatever you want.
     
  10. jmgek

    jmgek

    Joined:
    Dec 9, 2012
    Posts:
    177
    Sorry what I should have said is there a better way to tell if input is registered than how I was doing it?
     
    Last edited: Oct 19, 2022
  11. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
  12. Diogof

    Diogof

    Joined:
    Oct 4, 2016
    Posts:
    5
    Hello good morning. It may be that this asset has problems with unity 2021.3+ LTS versions. Because with my team we tried several versions and it keeps throwing us the error "error CS0234: The type or namespace name 'Windows'"
     
  13. Misscelan

    Misscelan

    Joined:
    Mar 8, 2013
    Posts:
    176
    Hi,

    I'm working on a input rebinding option using the SimpleControlRemapping at the starting point.
    It works for the most part, I see the changes get applied in the Rewired debug as well as in game, I have however an issue when I change layouts. Whenever I change the layout using the code below, the changes in the remapping get wiped out.

    Code (CSharp):
    1.     public void EnableUIRules()
    2.     {
    3.         m_ui_rules_active = true;
    4.    
    5.         List<ControllerMapLayoutManager.RuleSet> ruleSets = m_player.controllers.maps.layoutManager.ruleSets;
    6.  
    7.         Debug.LogWarning("EnableUIRules:" + ruleSets.Count);
    8.         foreach (ControllerMapLayoutManager.RuleSet ruleSet in ruleSets)
    9.         {
    10.             ruleSet.enabled = ruleSet.tag.Equals("RuleUI");
    11.         }
    12.  
    13.         // Need to apply the changes back to the layout manager
    14.         m_player.controllers.maps.layoutManager.Apply();
    15.  
    16.  
    17.     }
    18. //#endif
    Once this code is called, when later I call the opposite of this procedure (to enable the "in-game layout" where the remapping changes were introduced), that layout is back to its default.

    I'm not storing the input changes externally yet, but I thought they would stay permanent permanent while the game is running at least. Isn't that the case? Or, is this issue coming from something else?

    Thanks
     
  14. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    The cause of compiler errors like this is almost always either due to the improper setup of ASMDEF files in your project or due to installing the wrong version of Rewired in a project.

    https://guavaman.com/projects/rewired/docs/HowTos.html#asmdef-files

    https://guavaman.com/projects/rewir...tml#installation-problems-and-compiler-errors
     
  15. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    They don't. That would require Rewired to keep a permanent in-memory list of all Controller Maps you've ever loaded at any point. It doesn't work that way. The Controller Map is an instance which exists in the Player when loaded. When the Controller Map is unloaded, the instance is destroyed. UserDataStore is integrated with Layout Manager and will load the last saved map from saved data when layouts are changed. It will also load them when a controller is unplugged and reconnected.

    Rewired does have a small history of controller maps for use when a controller is disconnected and then reconnected without being saved, but it does not store alternate layouts. Only whatever Controller Maps existed at the time the controller was disconnected.
     
  16. kopanz

    kopanz

    Joined:
    Dec 6, 2016
    Posts:
    82
    Hi,

    Looks like the Control Mapper has some problem with Chinese text. It's only showing empty squares instead of the chinese text. I'm using Rewired LanguageData for translations. Is there a quick fix for this ? I searched this forum with chinese keyword but couldn't find anything related. Unity's own Text components in the Canvas is showing chinese text without an issue.
     
  17. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    Control Mapper uses standard Unity UI Text component or Text Mesh Pro Text component depending on which version you installed. They both use the default font. If those fonts don't support Chinese characters, they won't be displayed.
     
    kopanz likes this.
  18. phdhamster

    phdhamster

    Joined:
    Jun 16, 2020
    Posts:
    12
    I had a user report to me that when they launch the game, their Xbox controller is auto-assigned to the player 2 slot. Right now I am using Rewired's auto-assignment algorithm to define which player gets which controller, and for the most part it has worked great. I'd like to debug this user's problem, though. Do you have any ideas of what might cause this sort of issue? For instance, maybe their Steam controller settings are interfering with Rewired somehow? Are there any things I should check, or ask the user about, that would help narrow things down?

    e: Here is the log I had them capture for me:
    Log: Joystick connected ("Controller (XBOX 360 For Windows)").
    Log: Joystick reconnected ("Controller (XBOX 360 For Windows)").
    Error: <RI.Hid> Failed to create device file:
    e7 All pipe instances are busy.
    Error: <RI.Hid> Failed to create device file:
    e7 All pipe instances are busy.
    Error: <RI.Hid> Failed to create device file:
    e7 All pipe instances are busy.
    Error: <RI.Hid> Failed to create device file:
    e7 All pipe instances are busy.
     
    Last edited: Oct 24, 2022
  19. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
    "player.controllers.GetLastActiveController()" There are two sets of UI on PC and mobile,I want UI switching via this API,But Can't it get mobile input?,only keyboard、mouse、joystick
     
  20. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    All of those log entries are made by Unity, not Rewired.

    There is another controller present on the system being assigned to Player 1. This may be a real controller or a virtual controller.

    See Controller Assignment under Best Practices:

    https://guavaman.com/projects/rewired/docs/BestPractices.html

    • Always provide some means for your users to change controller assignments. It is especially important if you are making a multi-player game. You cannot know what devices, physical or virtual, will be present on a user's system, appear as Joysticks to Rewired, and be assigned to a Player. Device emulation software (VJoy, DS4Win, SCPToolkit, etc.) and certain device drivers can and frequently do cause problems by creating extra, non-functional virtual devices. Allowing the user to make their own controller assignments solves this issue as well as making it possible for users to swap controllers, etc. You can either include Control Mapper directly in your game or create your own system.
     
  21. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    https://guavaman.com/projects/rewired/docs/HowTos.html#last-used-controller

    Player.controllers.GetLastActiveController is based entirely on Action value in the Player. The Last Active Controller will change whenever any Action value in the Player changes and give you the controller that produce that change in Action value. Unless you are using the Custom Controller system to pipe touch input into Rewired's Player-Action system, Rewired knows nothing at all about touch screen input and cannot react to it.
     
  22. silveryw

    silveryw

    Joined:
    Sep 21, 2014
    Posts:
    12
    Rewired 1.1.43.0 reports an error under Unity 2021.3.11. prompt: The version of Rewired installed was not designed for Unity 2021.
     
  23. adamgolden

    adamgolden

    Joined:
    Jun 17, 2019
    Posts:
    1,555
    I noticed the advice about creating a map for Unknown Controller - does this mean that the generic Gamepad mapping (which also works as fallback for everything else, if I'm not mistaken) covers all types except that one specifically, so a map for Unknown Controller should still be added?

    Edit: Nevermind, got it.. Gamepad covers recognized and Unknown Controller covers the rest.
     
    Last edited: Oct 25, 2022
  24. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
  25. phdhamster

    phdhamster

    Joined:
    Jun 16, 2020
    Posts:
    12
    Thanks. They didn't tell me this, but they had a second controller plugged in that they forgot about. I also unchecked "remember assigned controller" from the auto-assign settings, so that someone can change an assignment from P2 to P1 if this happens.
     
  26. waltercl

    waltercl

    Joined:
    Dec 30, 2018
    Posts:
    47
    I went ahead and upgraded to the latest version and my problem did go away.

    I am now having an issue with saving changes made in Control Mapper, but I think it may be related to me not understanding how these controls are instantiated.

    The way I have this currently setup is that in my opening scene I have the Rewired Input Manager and the ControlMapper GameObjects setup in the scene. I have checked "Don't Destroy OnLoad" for both.

    When I go into the next scene I open the Control Mapper (via a script in my Pause Menu) and I make changes there. The changes work, but when I shut down the game and then restart, my changes aren't there and it's back to the default settings.

    Any thoughts on what I've done wrong?

    Thanks!
     
  27. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    I don't know what setting you're referring to. There's no setting with that name in Joystick Auto-Assignment.

    Joystick Auto-Assignment settings are session-only. They do not persist between sessions. If you're referring to "Reassign Joysticks to Previous Owner", that setting is useful to enable so a controller that is disconnected can be reconnected and assigned back to the same player.
     
  28. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    The UserDataStore_PlayerPrefs is responsible for loading the previous settings you saved. This is a component included on Control Mapper. If your launch scene does not have this component, nothing will be loaded. Rewired does not save anything on its own. UserDataStore is an optional add-on that handles all saving/loading of data.
     
  29. waltercl

    waltercl

    Joined:
    Dec 30, 2018
    Posts:
    47
    Ok, I got this figured out. You have to add the UserDataStore_PlayerPrefs component to the Rewired Input Manager GameObject.

    It's in the Documentation, I just didn't read it carefully enough.
     
    Last edited: Oct 26, 2022
  30. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    Glad you found that. I forgot that the compnent is required to be on the Rewired Input Manager GameObject as well. That's the only way Rewired can find it to know it should be used as the data source. Part of the Control Mapper setup is to add this component to the Rewired Input Manager.
     
    Last edited: Oct 26, 2022
    waltercl likes this.
  31. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
    In multiplayer development, multiple people modifying the "InputManager" prefab at the same time may conflict, can this be avoided?
     
  32. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    No. You can't allow multiple people to edit the input manager and merge the changes together. It's not possible. Everything is id-based. A sequential id is generated when a new object is created and that id is used throughout the data to identify that object. Ids are guaranteed to clash if multiple people edit the data independently.
     
  33. jmgek

    jmgek

    Joined:
    Dec 9, 2012
    Posts:
    177
    Rewired is causing my ui drag and drop to fail:
    `public class ItemSlot : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerDownHandler, IPointerExitHandler`

    The issues are not always the same but most of the time it just constantly calls the Exit `
    public void OnPointerExit(PointerEventData eventData)` event even if I'm hovering over my ui element.

    What's causing this and I don't want a rewired input player for my mouse, how can I disable it?

    I found the cause to be the rewired standalone input manager, if I turn it off will I still have access to the virtual controls?
     
    Last edited: Oct 27, 2022
  34. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    I can't tell you that. I need much more information to even come up with a theory. A working repro example would be by far the most useful. I don't know how your drag and drop is implemented. I do not see any issues with hover testing in the Examples/PlayerMouseUnityUI scene. OnPointerExit is only called when the mouse exits the UI box element.

    The Rewired Standalone Input Module requires Players to be designated as in control of the UI. This includes the mouse. The Player must have the mouse assigned to it for the mouse input to be processed for the UI. If you don't want a specific Player to control the UI, use the System Player.

    If you are referring to the Touch Controls pack, the touch controls work with any input module.

    If you don't use the Rewired Standalone Input Module, keyboard and gamepad input will not use Rewired.
     
  35. jmgek

    jmgek

    Joined:
    Dec 9, 2012
    Posts:
    177
    The standalone input module is consuming all of the mouse events. I posted the code that I'm using for the mouse events: ``public class ItemSlot : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerDownHandler, IPointerExitHandler``



    See how in the gif it's registering the native then the Rewired sysetem?


    How do I get your system to stop consuming the mouse pointer events?
     
  36. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    This isn't the code of your drag and drop system. This is simply the first line of the class definition. This doesn't tell me anything useful at all. Your class implements the UI event handler interfaces. Okay, great. And then what?

    You should not have two Input Modules. This will never work. Neither the Standalone Input Module nor the Rewired Standalone Input Module were written to co-exist with any other input modules. They are mutually exclusive. Both input modules read the keyboard, mouse, controller, and touch input and generate UI events from this data. You're getting double UI events from two different input systems.

    The Rewired Standalone Input Module is not consuming any events. It is generating them. It does not consume anything. The input module is responsible for generating all UI events that are sent to the UI objects (Selectables) by way of the Event System. The Input Module is where all UI events come from in the first place. Input Module reads input (Rewired's reads input from Rewired, Unity's reads input from Unity), generates events, and sends those events to UI objects through Event System.
     
    Last edited: Oct 28, 2022
  37. qazwsx2498

    qazwsx2498

    Joined:
    Oct 17, 2022
    Posts:
    13
    Is there a control like UI Navigation, which uses joysticks to control UI selection
     
  38. virtualjay

    virtualjay

    Joined:
    Aug 4, 2020
    Posts:
    68
    To be clear, the problems we had keeping us from moving to 2021 weren't in Rewired. They were in unrelated code.

    I was basing this off your latest post on the subject saying
    I thought this meant that prior to 2021.2.0f1, Rewired can not work alongside Unity's new input system. Maybe you just meant that's the oldest version it's actually tested with, and it might work fine on previous ones.

    And no, I'm not trying to get Rewired to use Unity's input system as an input source. I'm just wanted using the "Both" setting to work in 2020 LTS.
     
  39. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
  40. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    You understood correctly. It cannot work along side the new input system in versions prior to 2021.2.0f1 because Unity's new input system and Rewired both use Raw Input events and due to fundamental limitations of Microsoft's API they cannot both get input from devices at the same time. One will always supersede the other. In Unity 2021.2.0f1 Unity made a big breaking change to how they were reading mouse Raw Input events that broke Rewired even in Input Manager mode. I worked with them to deal with the new breaking changes as well as figure out a way both systems could co-exist. They exposed a new function so Rewired could receive the Raw Input events and them forward them so Unity's input system could get them. This new API does not exist in older versions of Unity. There's no workaround to this limitation in the Raw Input API.

    The reason I may have given the incorrect impression that you could use Both in Unity 2020 was when I clicked the little up arrow in the quote text to jump up to your original forum post, I saw the post directly below yours where the poster says he is using Unity 2021.3.11, so I was thinking you were using that version. Unless Unity backported the new API changes to Unity 2020, there's no way to use Rewired and Unity's new input system together on Windows without problems. Even if they did, Rewired for Unity 2020 doesn't call the function.
     
    virtualjay likes this.
  41. virtualjay

    virtualjay

    Joined:
    Aug 4, 2020
    Posts:
    68
    Thanks for clarifying.

    My coworker tried a newer minor version of 2021 and apparently the (unrelated to Rewired) issues we have seem to have been fixed. So at least that's a path forward if we need it.
     
  42. daxiongmao

    daxiongmao

    Joined:
    Feb 2, 2016
    Posts:
    412
    I have gotten everything working well on pc and now have switched back to iOS.

    Touch seems to be working fine but what I noticed is there seems to be a virtual cursor. After touching its at the last location and causes ui elements to get a hover event when scrolling them.

    I read about player mouse but what I saw said I had to manually create one to have a virtual cursor. I do not believe I have done this anywhere.

    I didn’t see anything else about virtual mouse/cursor on iOS. I do not want any kind of mouse etc only touch inputs. Is there some setting I need to disable or modify?

    Thanks
     
  43. virtualjay

    virtualjay

    Joined:
    Aug 4, 2020
    Posts:
    68
    Oh, I just remembered something that I wanted clarified. You said "As of Unity 2021.2.0f1, Rewired can now work alongside Unity's new input system on Windows" (emphasis mine). Is it only on Windows? We're building apks for the Meta Quest 2. Will Unity's new input system class with Rewired in that case?
     
  44. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    As far as I am aware, the only build target with any issues is Windows Standalone. Raw Input is Windows API. No other build target uses Raw Input.

    I don't know what platform Meta Quest 2 runs. APK sounds like Android. Rewired on Android uses UnityEngine.Input for input so there is no issue with using Both.
     
    Last edited: Oct 29, 2022
  45. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    If you didn't create the Player Mouse cursor, this isn't Rewired doing it. Rewired on iOS is 100% dependent on UnityEngine.Input for all input:
    https://guavaman.com/projects/rewired/docs/Overview.html#tested-platforms

    Anything happening with regard to mouse/touch input is under the control of Unity.

    Disable this:
    https://docs.unity3d.com/ScriptReference/Input-simulateMouseWithTouches.html
     
  46. daxiongmao

    daxiongmao

    Joined:
    Feb 2, 2016
    Posts:
    412
    Thanks, not sure why I haven't heard of that before. This is my first build on iOS since updating to unity 2022.1.19f1 , using the old input system and having rewired installed.

    I tried disabling both of these and it did not have any effect.
    Code (CSharp):
    1.  
    2. Input.simulateMouseWithTouches = false;
    3. Rewired.ReInput.touch.simulateMouseWithTouches = false;
    4.  
    I was able to get it to stop by replacing the Rewired Event system with the standard Unity Event System.

    *Edit* Also disabling the allow mouse input if touch supported fixes it as well.
    Is that the expected behavior? Should I be adjusting these based on platform?

    Just to explain the issue again I have a large list of scrolling UI elements. If you touch and drag and release it so it keeps scrolling on its own for a bit. Where you touched last, the elements scrolling under it act highlighted. Like there is a cursor there causing them to trigger their highlight/hover.

    Below is my Rewired Event and Standalone setup.
    upload_2022-10-29_15-41-35.png
     
    Last edited: Oct 29, 2022
  47. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    Rewired.ReInput.touch.simulateMouseWithTouches is just a wrapper for UnityEngine.Input.simulateMouseWithTouches. The entire Rewired.ReInput.touch class is just a wrapper. I never should have made that, but it's too late now. It really serves no purpose.

    The symptoms you're describing are consistent with Unity moving the mouse pointer position based on touches. That's what Input.simulateMouseWithTouches = false is supposed to disable. Rewired is just reading the mouse pointer X/Y position from Unity. If Input.simulateMouseWithTouches = false, Unity should be returning 0,0 for the mouse pointer position as far as I'm aware. (Edit: Although, it's likely it returns whatever the last mouse position was before disabling it. This may be in the center of the screen?) Input.mousePosition. I'm hearing more and more people tell me that disabling Input.simulateMouseWithTouches is not working on various platforms, so maybe there is a new Unity bug. I don't know.

    Allow Mouse Input If Touch Supported will make the input module ignore the mouse position entirely. The fact that this fixes it is consistent with the theory that Unity is returning a non-zero Input.mousePosition when it shouldn't be after you disabled Input.simulateMouseWithTouches.

    Disabling Allow Mouse Input if Touch Supported is dangerous on platforms that can have both a mouse and a touchscreen like Windows. If this fixes the problem, disable it, but do it for the specific build target using the #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR preprocessor defines.
     
    Last edited: Oct 30, 2022
  48. daxiongmao

    daxiongmao

    Joined:
    Feb 2, 2016
    Posts:
    412
    Thanks
    I found the rewired version of it searching for the function so I figured I would try it to see if did anything different.

    I turn it off pretty early, even stuck it in an update loop to make sure was staying off.
    It seems to return where ever the last touch was. Not a fixed location.
    Was thinking the same thing about just disabling it on iOS and probably Android.

    Let me know if there is anything you might want me to test if your interested in digging into it anymore.
     
  49. guavaman

    guavaman

    Joined:
    Nov 20, 2009
    Posts:
    5,627
    I would turn it off in Awake or RuntimeInitializeOnLoadMethod.

    Try enabling "Force Module Active" in the Rewired Standalone Input Module inspector.

    You could also log UnityEngine.Input.mousePosition to find out where the Unity mouse cursor is.
     
    Last edited: Oct 30, 2022
  50. daxiongmao

    daxiongmao

    Joined:
    Feb 2, 2016
    Posts:
    412
    Here are the couple of test cases.
    I moved the Input.simulateMouseWithTouches = false; to an awake in the very first scene.
    I printed mouseposition in one of them and like you suspected its returning the screen coordinates of the touch location even when Input.simulateMouseWithTouches is false.

    #1 - Has issue
    Force Module Active = false
    Input.simulateMouseWithTouches = false
    allowMouseInputIfTouchSupported = true

    #2 - Has issue
    Force Module Active = true
    Input.simulateMouseWithTouches = false
    allowMouseInputIfTouchSupported = true

    #3 - No Issue
    Force Module Active = false
    Input.simulateMouseWithTouches = false
    allowMouseInputIfTouchSupported = false

    So no change really. The thing that keeps the issue from happening is the allowMouseInputIfTouchSupported = false.

    And so my workaround is modifying that based on the build platform.