Hi everyone, I'd like to announce my new input system for Unity, Rewired. Input is something I've been struggling with in Unity for over 5 years. If you've ever used Unity, you know how difficult to work with and limited their input system is. What you may not know is that Unity's input system is so totally broken, it's impossible to give your players a good experience in a multiplayer joystick game for many, many reasons. (See my website, the section on Problems with Unity Input for info.) I've been waiting paitently for Unity to fix input for over 5 years. I finally got tired of waiting. It took me longer than it should have to decide to go fix it myself, but I'm really happy now that it's done. Developing Rewired was a really rewarding experience. I hope it helps a lot of people make the games they want to make without all the hassles. If you find it useful, please help me spread the word by Tweeting, sharing with your friends on Facebook, and spreading the word in the forums. Happy gaming! Rewired is an advanced input system for Unity. Take input to the next level! Rewired makes joysticks, the keyboard, mouse, and other controllers work as they should. Need something more than Unity's basic input system? Have you tried other solutions only to find they have too many limitations? Check out Rewired... Get Rewired on the Unity Asset Store Rewired Website | Documentation | Unity Forum Thread Player-Centric Rewired features a player-centric input system making it the perfect solution for multi-player games. Instead of getting input from the controller, you get input from the player. So no matter whether the input is coming from the keyboard, mouse, joystick, or touch controller, you always get the result with no hassle. Controllers can be intelligently auto-assigned to players on connect/disconnect, so you don't have to worry about what controllers each player owns. Instead, you simply get input for the action you're looking for and Rewired handles the rest! Intelligent Hot-Plugging If you unplug a joystick or a wireless controller falls asleep, joystick Ids can get reordered making it difficult to get input from the right controller. Not anymore! Rewired is the first and only input system available for Unity that fully supports intelligent controller hot-plugging on Windows, Windows Store, and OSX. Controllers are intelligently auto-assigned to players on connect, so you don't have to worry about Ids. No more guessing which controller is which. It just works. Hot-plugging works with virtually any USB controller on Windows and OSX.  Designed for Multiplayer Rewired was made for multiplayer gaming. The player centric nature, the unique and powerful mapping system, and intelligent controller hot-plugging and auto-reassignment make it the ideal input solution for multiplayer games. Of course, it's also great for single player games! Controller Maps Rewired features a powerful controller mapping system that allows you to create highly complex input schemes for any style of game. Maps stack so you can have as many maps as you need for each controller, the keyboard, and mouse. If you have multiple game modes that need different controls such as Menu, Infantry, Tank, Airplane, you can have shared controls on one map, and mode-specific controls each on its own map, then enable/disable maps as needed. Create pre-defined map layouts, allow users to map controls, and save maps to XML. A Full-Featured Input Editor Create and edit all your Players, Actions, Input Behaviors, Maps, Categories, and more directly in the Rewired Editor. The editor is packed with features and has an intuitive workflow. The Editor The Rewired Editor was designed to be your one-stop-shop for input configuration. It gives you access to everything you need to create input for your game. Configure global settings such as the update loops, joystick auto-assignment options, and more. Create all your players, actions, and controller maps, assign maps to players, and more from an easy-to-use interface. Organize your input how you want with map and action categories. The editor fully supports Undo and Redo and has complete tool-tip descriptions. Categorization Do you need to create dozens and dozens of actions? Using Unity's input manager, you create one long list of actions in a fixed-order array. It can quickly become confusing and cumbersome to make changes scrolling through a list of dozens or even hundreds of actions. Other input systems make you create your actions by coding. Rewired solves the problem with action categories. Now you can split up your actions into logical categories for easier editing. And you can reorder, duplicate, insert, and delete actions as you see fit. Maps and Layouts Create pre-defined controller layouts for various controllers or save time and just create maps for a controller template. Create complex, shared and stacked mapping set-ups easily by assigning the maps you want to each player, then setting the start enabled state on the maps. Even create system-only maps for special actions such as Save, Load, etc. Map the keyboard, mouse, joysticks, and custom controllers all from one interface. You can even create map categories and layouts for organization. Advanced Input Rewired is not just another Unity input wrapper like other packages. Rewired supports many platforms that Unity supports with extended native support on Windows, Windows Store, and OSX. Rewired leverages Raw Input and/or Direct Input and XInput on Windows, and I/O Kit on OSX to access input devices directly, allowing for far more control over input. This makes possible some very powerful features such as full hot-plugging support for joysticks and support for more than 20 buttons per controller. Rewired is the only input system available for Unity with native support for these platforms and the only one to offer these advanced features. For other platforms, Rewired utilizes Unity's input system so you still get access to all the other features it provides. Cross Platform Controller axes and buttons can be mapped completely differently on different platforms in Unity, and the element assignments in Unity's Input Manager are not run-time modifiable. This makes it extremely difficult to create cross-platform games with controller support. In Rewired, supported controllers have been mapped for consistency on Windows, Windows Store, OSX, Linux, Android, and Webplayers. Other platforms are supported via custom user control mapping. And you can add new controller definitions to support even more. Much More... • Supports up to 128 buttons and 32 axes per controller on Windows and OSX. • Create user controller remapping screens with named controller elements, select a named controller from a list. • Input Behaviors allow you to create actions that share similar properties without having to duplicate information. • Double-press/click support with customizable timing. • Keyboard modifier support with up to 3 simultaneous modifier keys. • Axis calibration (min, max, zero, deadzone). VideosRewired - Intelligent Hot-PluggingRewired - Overview. Full Feature ListWorks in Unity Free and Pro.Player-centric input system.Full hot-plugging support on Windows, Windows Store, and OSX (Linux and Android planned if there's enough interest.)Optional XInput support for Windows (mandatory for Windows Store).Fallback on Unity input for all other platforms. Most features still work.Intelligent auto assignment and re-assignment of controllers to players on connect/disconnect with configurable options to tune the assignment to your needs.Connect, pre-disconnect, and disconnect events.Get input in Update, Fixed Update, and OnGUI -- you choose which loops update runs in, one or multiple as needed.Customizable and saveable controller maps -- export mappings to XML and save how you choose (example included using PlayerPrefs, but save however you like.)Unlimited mapping layouts per controller.Controller Templates (see Controllers section).Editor GUI for creating Actions, Input Behaviors, Joystick/Keyboard/Mouse maps, categories, etc.Editor GUI for creating and editing Joystick Hardware Maps (for adding new fully-supported joysticks).Editor GUI for creating and editing Controller Templates (for adding new templates or adding new joysticks to a template).Extremely versatile -- can be used for simple 1-player games all the way to highly complex multi-player games with complex mapping requirements. Gives the developer a high level of control and doesn't try to force you into a specific one-size-fits-all mold.ControllersFunctional support for most USB controllers  (see below).Extended support for many game controllers on Windows, Windows Store, OSX, Linux, Android, and Webplayers. You can create additional controller definitions to support more, or if you'd like you can mail me your controller and I'll add the definitions and mail it back! Supported controllers are recognized on each platform and are fully mapable by element name and have standardized axis directions.For any controller not included, you can map an Unknown controller which includes all possible buttons/axes on the platform (Windows 128 buttons & 32 axes, etc.) Regardless of whether you define a map for this, users will always be able to manually map every element on the controller. This means support for the vast majority of USB controllers. Controller template system so you can either choose to create default maps for every controller you wish to explicitly support, or save time and just map the template. All controllers that use that template will be mapped automatically. (Comes with a Dual Axis Gamepad template that works for the included gamepads.) User can always map any remaining controller elements even if they're not defined on the template.Named buttons and controller elements for supported controllers (for help messages and config screens).Vibration (XInput only currently)Custom Controllers - Any source can be used to drive the controller's element values. Custom Controllers can be used for on-screeen touch controllers and more.Xbox 360 controllers supported on OSX with this driver.MappingPowerful controller mapping system that allows you to create highly complex input schemes for any style of game.Unlimited, stackable, maps per controller.Maps stack so you can have as many maps for each controller as you need. For example: If you have multiple game modes such as Infantry, Tank, Airplane, you can have shared controls on one map, and mode-specific controls each on its own map. You can have even more maps as needed: A Menu map for when you're in the menus, a system map for controls like Save/Load and Quit, multiple maps for different players on the keyboard, etc.Enable / disable maps as needed, for example, when changing game modes.Multiple layouts per category. Allows you to have optional controller layouts.A shared controller (the keyboard for example) can be mapped by any number of players with any number of maps.All maps are owned by the player, so changes you make to one player's maps don't affect the others even if it's on the same controller.Map axes to buttons and buttons to axes if you choose.Split axes - allows you to map one pole of an axis to an action and the other pole to another action if you want.Axis Contribution - you can choose how your button or axis affects the final Action's value. A button can generate positive or negative values on an Action's final axis value.Save maps to XML.InputStandard Unity lingo: GetButton, GetButtonDown, GetAxis.Poll for input as per Unity standard practice or use event-based input to get input without polling.Input is handled through the Player class:player.GetAxis("actionName").Get input directly from elements by index if necessary.Get Action input by action name or action id.Positive and negative buttons.Double-press/click support with customizable timing.GetButtonDown buffer -- allows you to make GetButtonDown respond for longer than a single frame to help with timing issues when user is pressing the button rapidly.Keyboard modifier support - Map keyboard controls with up to 3 modifiers - Control, Alt, Shift, and Command (mac).Axis calibration (min, max, zero, deadzone)PlayersUnlimited number of players.Supports multiple controllers per player.Convenient System player for handling system actions - Save, Load, etc.Define starting maps for joystick, keyboard, and mouse per-player.ActionsDefine actions in the editor.Create an action once and use it for as many players as you like.Action categories for organizational convenience.Set user-assignable flag on an Action or Action Category to allow or prevent certain actions from showing up in lists (useful for mapping screens.)Input BehaviorsInput Behaviors allow you to set options for digital axis simulation (sensitivity, gravity, etc.), how to handle mouse axes, a GetButtonDown buffer, button double press speed, button dead zone, and more.Each Action is assigned an Input Behavior, so if you have many actions that need to behave the same way, you don't have to duplicate the information, just set them to use the same Input Behavior.Per-player, and run-time modifiable.Save to XML.Map categoriesCategorize your maps by any criteria you choose. For example: System, Menu, Gameplay Shared, Infantry, Vehicle, Airplane.Set user-assignable flag on a category to allow or prevent user-assignment of certain controls (system controls should be protected from change, for example).Category selective conflict checking - choose to conflict check some categories with other categories, but not necessarily in both directions. (Useful for complex stacked map setups).PerformanceRewired is fast, written in C#, and tuned for performace.ZERO bytes of memory allocated per-frame during gameplay means no garbage collection overhead. (Platforms that fallback on Unity input have periodic very small allocations as it polls Input.GetJoystickNames() every second or two to detect joystick changes.)The vast majority of code is included in a DLL, so it won't slow down your script compilation during development.MiscInput Manager is self-contained so you can actually have separate input managers for different levels if you choose with entirely different mappings, etc. (Not necessary but interesting!)Functions for mapping conflict checking.Identify joysticks by button press in Unity Fallback mode.Included example of mapping screen using Unity GUI (will update when new GUI system comes out) including saving and loading of maps per-player.LimitationsHot-plugging in Webplayer is not possible because the Unity webplayer cannot access outside libraries. However, the rest of the features work just fine in webplayer.Rewired is not for those who want to make games with zero coding knowledge. Coding is required.RequirementsUnity 4.3 or later, Free or ProOSX 10.5 or later is required for the OSX Unity editor and OSX Standalone builds.Tested PlatformsPlease refer to the list here.Want more information?Check out the documentation to learn more about the inner-workings of Rewired.Rewired is available now on the Unity Asset Store!. 1 Controller must be compatible with underlying system. On Windows the controller must be compatible with Raw Input, Direct Input, or XInput. On OSX, it must be compatible with I/O Kit. Support for exotic controller types not guaranteed. . Rewired Website | Documentation | Unity Forum Thread Get Rewired on the Unity Asset Store .