Showcase: Porting to the New Input System in a RTS game

Hey Guys,

here at Gentlymad, I just finished porting our live game (Endzone - A World Apart) from the Old Input Manager to the New Input System. To be honest we are always very skeptical about using new technology on a published/ live game. But enabling players to do dynamic Key Mapping was something we wanted to ship for a long time. We’ve been tinkering with other solutions for this (InControl, Rewired) in the past, but having a solution that comes directly from Unity, with long term support for the feature, we wanted to give this a shot. This decision was manifested with Unity releasing 2019.4 LTS where the InputSystem is not longer in preview.

So, after struggling with the rebinding example, I got the basics up and running reasonably quick (approx. 8 hours of dev time). After that, most of my dev time was spent on writing a wrapper so that we do not have to change too much of our game code as well as implementing a localized rebinding UI with conflict highlighting as part of our options menu (8 hours * 5 days :smile:).

Here are the results:


The remapping screen. (DisplayStrings seem to be bound to the “language” of the keyboard?)


Ongoing rebind highlighting


Custom conflict highlighting.

Here is my Feedback (so far):

  • Overall it’s real magic to have Unity with an out-of-the-box ability to remap control inputs
  • Loving the input actions editor and the ability to attach processors
  • As far as I know there is no way to set the localization language of the DisplayString manually? In my case it’s always locked to German. But the language in our case is handled by Steam, so if the user chooses to play the game in English, I want to localize input mappings in English as well. This does not seem to be possible right now.
  • The DisplayString is not fully localized, my mouse controls are presented with their English name (RMB or Right Button) while the DisplayString of keyboard mappings is always localized in German in my case.
  • Pass Through is hard to understand and it’s not well explained in what situations you should use it. In my implementation I had to set almost all Axis like actions to pass through mode although I never really understood why, it was more try and error.
  • There is no Conflict Management for rebinding. Assigning the same keys on multiple actions is something you don’t always want to have. I’m manually checking for conflicts after key assignments to highlight them, but it would be great to have an event for conflicting controls when rebinding.
  • We implemented Click And Drag like camera behavior. You click and hold one mouse button and then move the mouse to move the camera. I had to use a custom composite in that case to make it work and I was not able to make this composite work together with keyboard movement in one action (they both negated their movement)
  • For me it was surprising and confusing that the InputBinding object is a struct and changes on every rebind. So I ended up updating my reference to the binding after every rebind.
  • There are inputs that make no sense to rebind, like delta, position and so on. You have to spin a custom solution around this, filtering them out or having a “dropdown”. Some kind of checkbox on a per binding basis would help to being able to exclude them from rebinding.

Any feedback is very welcome!
:slight_smile:

1 Like

Thanks for sharing the details about the wonky localization. Hope Unity improves this in the future.