YuvalGGYuvalGG

Game development

Based on the makers’ specs and my own testing where I say so.

How to write a control scheme

A control scheme is a written map of verbs, devices, and which actions can happen together. Write the rows before you bind a key.

Updated 11 min readYuval Eizik

  • tingbase
A wide dark key in front of a small cluster of plain dark keys, with a round dark button behind them and a warm line along the wide key's near edge
On this page
  1. Where this action sits
  2. Example control maps
  3. What the scheme is, and what it is not
  4. Write the verbs, then mark primary
  5. Where the hands rest
  6. Two hands, then the fingers
  7. One button, two meanings
  8. Write the rows before the script
  9. The default, and the other hands
  10. What you leave with

Ever played a game where jump and reload fight over one key? A control scheme stops that. It’s a written map. Each verb the player can do sits next to the input that does it, on a device you named, with a note for which verbs can happen in the same moment. The page is that map. The code that reads the button comes later, as one named behavior in Unity.

I write that map for Tingbase: Unity 6, C#, a 3v3 hero shooter on Steam (app 4086630). Players switch class/stance (Tank, Healer, DPS) instantly with the 1, 2, 3 keys. I play left-handed and move on UHJK. More under game development.

Unity’s Input System docs draw the same split: an Action is the purpose, a Binding is the device control. You can change the binding later. You cannot invent the verb after the fight has started.

Where this action sits

What has to happen?

Put them on different hands. The hand that moves should not also be the hand that jumps.

Example control maps

  • Unity Input System, official Actions page. An Action is the purpose. A Binding is the control. The default project maps split Player from UI. The default Move action binds the left gamepad stick, the WASD keys, and the arrow keys. The default Jump action binds Space, the south face button, and an XR secondary button. Those are Unity’s sample rows. They are not Tingbase. Unity Actions.
  • Apple’s archived Game Controller Programming Guide. Controls that must work at the same time should almost always use different fingers. Three face buttons at once is difficult. A face button plus a shoulder or a trigger is easier. A shoulder and the trigger on the same side, pressed together, is difficult. If the game mixes a touchscreen and a pad, the thumb leaves the pad to touch the screen. Apple, Incorporating Controllers.
  • Game Accessibility Guidelines, remapping. A fully remappable scheme is the best-value case they name: any command to any available input. That covers limited mobility, one-handed play, an AZERTY keyboard, and a player who simply wants a different layout. Presets help. Presets alone are not enough. Allow controls to be remapped.

The short version: write the verb, the device, and which verbs can be true together. Bind after that. WASD is a rest, not the scheme.

Comparison
Kind of actionWhere it sitsShare a button?
Primary, in constant useOwn button inside the restNo
Secondary, situationalNearby. A short reach is fineOnly if both meanings cannot be true
Two actions at onceDifferent hands, or different fingers on a padNever on one finger
Menu, start, lose, quitOwn row. Unity puts these on a UI mapContext only when the fight cannot use that button

What the scheme is, and what it is not

The verbs are already decided if you scoped the game. The first game is one verb, plus a way to start, a way to lose, and a way to quit. Those four are the scheme until the scope list says otherwise. A menu action counts too. Josh Bycer’s “5 Steps for Building a Great Control Scheme,” on Game Developer, treats menu interactions as verbs alongside run and jump. Write the ones this game actually has. A verb still on the later list does not get a button yet.

WASD is not the scheme. It is one cluster for one hand on one QWERTY board, written on the assumption that the mouse is in the other hand. Unity’s default Move action already offers arrows as well as WASD. Game Accessibility Guidelines mark a scheme that is only WASD as a bad case: it is awkward on AZERTY, and it locks out a player who needs a mouse, a pad, or another device. I offer UHJK on the games I play because the mouse is in my left hand. That is still a rest. The scheme is the verb list and the rule for which of them can be true together. The feel comes after a stranger can press the verb without looking down.

Write the verbs, then mark primary

Bycer’s second step is the verb list. A platformer can be run and jump. A shooter is a longer list. Menus go on that list. Tingbase’s published list on the Steam page includes the stance switch on 1 / 2 / 3.

Then split them. Bycer’s third step, and the matching “5 Tips for Designing Control Schemes” post, give placement a rule. A primary action defines the game and is used constantly. It gets its own button inside the rest, so the player can use it without looking. A secondary action matters and is situational. It can sit a little off those fingers, and it should still be close. His warning for PC designers is parking secondary actions as far away as possible. If the player has to think about where the button is, it is too far.

The Souls games use every button on the pad, and they do not use all of them at once. Frequent actions stay on the fingers that are already resting. Filling all four shoulder and face buttons at once is confusing, outside fighting games, and it ports badly to a keyboard, because movement there already uses more fingers than a stick.

Too few buttons fails as well. Bycer’s tips post says if movement and fire share one click, the wrong one fires. A command you need at a moment’s notice gets its own button. A platformer’s jump does not share. Tingbase’s stance keys are a published primary.

Where the hands rest

Bycer’s first step is the neutral position: the resting hand on a pad or a keyboard while the game is being played. Pads tend to have one or two of those rests. A keyboard rest depends on which hand is on the keys. The rest is the guide for where actions go, because that is where the fingers already are. His tips article builds movement, the primary action, and anything in a fight around that rest. A hand that has to leave it during play is a scheme that failed. A control that pulls the hand away can exist when it is rare and stays out of the fight.

A WASD cluster assumes the mouse is in the right hand. That rest is a stretch when the mouse is in the other hand. I play left-handed. Movement is UHJK. The left-hand MMO page is the same rest in World of Warcraft. Write the rest for the hand that will actually be on the keys, then offer a remap for the hand that is not yours.

Andrew Dotsenko, in “Designing Game Controls” on Game Developer (29 March 2017), names three finger groups. Thumb and index are the primary group, for actions such as shoot and jump. The middle finger suits a hold, such as an aim mode. Ring and pinkie are weaker, for secondary actions. He reads Fitts’s law as a layout rule: a button is easier when it is closer and larger, so the frequent action goes on the primary fingers. His Watch Dogs 2 PC guideline put WASD, Space, Shift, Tab, and the mouse buttons in the first tier. That tier is on that rest. On mine the first tier is the right-hand cluster.

He also writes an attention limit. From observation he treats one primary action, one state change, and one contextual action as the most one hand can hold at once. A driving scene that also asks you to aim and shoot is three primaries. The pad can physically do it. The player cannot. Group related verbs, keep the same verb on the same button across layouts when you can, and use a genre convention when one exists. WASD feels like one move because players have already automated it. UHJK is the same shape on the other side of the board.

Two hands, then the fingers

Bycer’s next step is the hands. Split primary actions across them. If the left hand moves, the right hand jumps. Tying more actions to one hand makes them harder to do together, and a primary action is in use constantly. In his example the left hand maneuvers and the right hand fights. Camera and movement stay off the same hand.

Apple’s archived Game Controller Programming Guide states the same constraint from the fingers. Controls pressed together should use different fingers. Three face buttons at once is difficult. A face button plus a shoulder or a trigger is easier. A shoulder and the trigger on the same side, pressed together, is difficult. If the game mixes a touchscreen and a pad, the thumb leaves the pad to touch the screen. Apple also says a controller should not be required: on a Mac, keyboard and mouse have to play the game. That is a second column on the page, not a later surprise.

On a keyboard-and-mouse shooter the split is the same rule. Movement on one hand. Look and fire on the other. I look and fire with the left hand. I move on UHJK with the right. The smallest loop still has to be one verb you can press without a glance down.

One button, two meanings

Context-sensitive commands can share a button when the two commands cannot be true together. Bycer’s streamlining step says that outright. Position can carry the meaning. In Dark Souls the left and right triggers match the left and right hand slots. On a keyboard he prefers where a key sits over a letter that spells the word. Older PC games put health on H and drink on D, and the scheme scattered. StarCraft 2 placed hotkeys where the commands sat on the interface.

His tips article adds modifiers. Devil May Cry and Assassin’s Creed fit more commands onto the same buttons when the context is unambiguous. If the player has to guess which meaning will fire, the share failed.

A jump does not share. A stance switch you need in the middle of a fight does not share with a menu. Tingbase’s 1 / 2 / 3 are published as instant class/stance keys.

Write the rows before the script

Write the logical action first, then a column for each device you support. Unity’s Input System is built for that shape. The official Actions page says you associate the purpose with device controls in a flexible way, and that Actions make it simpler to let players customize bindings at runtime. You enable a map when that context is live. The default asset ships a Player map and a UI map so gameplay verbs and menu verbs are not fighting for the same listen. That is the row-then-code order. Hard-coding if (Keyboard.current.wKey.isPressed) is a bind with no row. It also assumes the rest is WASD.

Samantha Stahlke’s “A User-Centred Approach to Control Design,” on Game Developer (9 October 2017), writes the questions for one student game, Spirit, before any bind. What the controls should do: each core interaction on its own region of the device. Which devices: a keyboard and an Xbox pad. What they should know: a hint, a locked input, or a physics response changes the scheme. How they will be used: the player is looking at the screen, so the next input should not need a glance down. What the player should perceive: the challenge comes from the game. Their later rows put movement on WASD and a stick, and jump on space and the south button. That is Spirit’s map. Yours starts from your verbs and your rest.

Dotsenko’s three principles sit over those rows. Accessibility: easy to learn, and built for what a hand can do. Intent: the control does what the player expects. Expression: enough room to get better. He says to playtest and watch what players actually do. A first Tingbase week would still be one ability exchange on one stance. The 1 / 2 / 3 switch is later content on the same verb.

The default, and the other hands

Bycer’s close is that a remap option does not replace the default. You made the game, so the default should make sense within minutes. Playtesting, by you and by other people, is how that default gets found.

Let players remap everything. Game Accessibility Guidelines rate a fully remappable scheme as the best case: any command to any available input. That covers limited mobility, one-handed play, an AZERTY keyboard, and a player who wants a different layout. Their page quotes a player who could play Overwatch’s roster because the remap was there. Presets help. Presets cannot cover every hand. When the platform will not allow a full remap, an alternate scheme is the next case.

Accessible Game Design’s controls page marks requiring two-handed peripherals as worst. A platformer that uses arrow keys and space, then a mouse click to continue, pulls a hand off the keys when the level ends. A keyboard-and-mouse shooter should also offer one device when it can. Two motion controllers need an alternative. They name hemiparesis as one reason a player has one hand.

The default and the remap do different jobs. Bycer wants the default learned in minutes. The remap is how a player whose hands do not match that default can still finish the loop. I use UHJK in my own play. I will not ship UHJK as the only rest. Unity’s default Move action already keeps arrows next to WASD. Xbox’s XAG 107 input note makes the same demand on that platform: in-game remapping, not only a system-level swap. System remap is a safety net. It is not the row on your page.

What you leave with

The page has the verbs, including start, lose, quit, and the menus this game has. Each one is marked primary or rare. The rest is described for the device you ship first, and for the hand on it. Actions that happen together are on different hands, or on different fingers of a pad. A shared button lists both meanings and why they cannot both be true. A second device has its own column. The rebinding line says yes, or it names the alternate scheme.

Implementing a row is still one behavior. Name the Action, then the Binding, then the script. Try that one action in the editor. Test one rule. Then watch someone who did not bind it. The playtest is that watch. Look for a glance at the keys, a hand that leaves the rest, and the wrong action firing. Write what they tried and what the game did, which is the playtest note. Change the row, or write why it stays. Bycer’s line for a good scheme is that it has left the player’s mind.

Write the verbs, mark which can be true together, rest the hands that will actually be on the device, then bind. More under game development.

Common questions

What is a control scheme in a game?

It's a plan that lists every action in your game next to the input that does it, for each device you support. It also notes which actions can happen at the same time. The keys are just one part of it.

Should I design the control scheme before coding?

Yes. Writing it first tells you which actions exist, which happen together, and which device they're on. In Unity's Input System these become Actions and Bindings, which you can then code and test one at a time.

Can the jump button share another action?

Only with an action that can never happen while jumping. Jump is used constantly in most games, especially platformers, so it should usually get its own button.

Is WASD a good default for PC games?

It's a common default, but it shouldn't be the only option. Offer remapping or alternate layouts, and spread actions that happen together across both hands. Left-handed players often use other clusters like UHJK.

What if my game has more actions than buttons?

Put rare actions on shared buttons or modifiers, as long as both meanings can't apply at once. Actions you need mid-fight should get their own button within easy reach.

How do I design game controls for left-handed players?

Offer full remapping so any action can go on any key or button. WASD assumes the mouse is in the right hand, so left-handed players often move on keys like UHJK instead. I play left-handed myself and move on UHJK.

Should games let players remap controls?

Yes. Game Accessibility Guidelines call remapping one of the most valuable accessibility features. Presets are good, but the best option lets players put any action on any input.

What is a context-sensitive control?

It's one button that does different things depending on the situation, like interact near a door and attack elsewhere. It works well when the two actions can never be needed at the same moment.

How do I playtest a control scheme?

Watch someone who didn't design the controls. Note when they look down at the keys, move their hand out of position, or trigger the wrong action. A good scheme is one players stop thinking about.

Keep reading