Brian Duffy

Writing

Technical

What VR interaction design keeps getting wrong

Ten years of consumer VR, and the same handful of mistakes.

I have been building for VR since 2016 – the year the Rift shipped – and shipping it since 2018. Some mistakes have been made continuously that entire time. Here are the ones I keep meeting.

The player’s body is an input device you do not control

This is the root of most of it.

In a flat game, input arrives through a device you specified. In VR, input arrives through a person, in a room, who will do things your game did not offer. They will stand up when you assumed they were seated. They will physically walk into a wall you did not model. They will put their hand through a table. The headset will lose tracking because someone turned a light on.

None of these are edge cases. They are Tuesday. A VR player controller that does not explicitly handle tracking loss, physical height change and recalibration is not finished, and every one of those is a system, not a check.

Discontinuous movement breaks code that has no idea VR exists

Here is a concrete one, and it is a whole category rather than a single bug.

Trigger volumes assume things move continuously. Something enters, something leaves, you get both callbacks. Teleport locomotion violates that assumption: the player ceases to be in one place and begins to be in another, with nothing in between. In the framework I was building on, teleporting out of a volume never fired the exit callback at all. Whatever that volume was doing – a slow zone, a damage region, an audio state, a scripted trigger – stayed on.

The bug is not really in the teleporter. It is that a large amount of engine and middleware code was written on the assumption that things move. Every time you add a mode of movement that is not movement, you should ask what else believed otherwise.

Left-handed support is an architectural decision, not a setting

Roughly one person in ten is left-handed, and most VR games treat them as an afterthought or not at all.

The reason is that doing it properly is not a toggle. Every weapon, tool, holster, socket and grab point needs a mirrored counterpart, and mechanisms with real handedness – a break action, a pump, a bolt – need their offsets recaptured after the mirror or they animate wrong. Done at the start it is a modest constraint on how you author interactive objects. Retrofitted at the end it is enormous, which is why it usually does not happen.

Decide on day one. It is one of very few things in this medium that is genuinely cheap early and genuinely expensive late.

Comfort options are not accessibility extras

Snap turning versus smooth. Teleport versus stick. Seated versus standing. Vignetting under motion.

These get filed under accessibility and buried three menus deep, and that framing is wrong twice over. They are not optional polish – for a meaningful share of players they are the difference between your game being playable and being unplayable, and a player who feels ill in the first two minutes does not go looking through settings for a fix. They uninstall.

Put them in front of the player before the game starts, and make the safest option the default. You can always let people turn comfort off. You cannot get someone back who was sick before they found the menu.

Physical objects have costs in systems that look unrelated

If a magazine is a real object the player pulls from a pouch and pushes into a gun, that is a wonderful interaction and it is worth doing. But understand what you just bought.

Your ammunition count now exists in three places at once – in the pouch, in a magazine in mid-air, and chambered in the weapon – and they have to agree. Your save system now has to restore not just “the player had a shotgun” but the physical state of that shotgun: which chambers held shells, whether the action was open, where it was holstered. Restoring that means respawning the object and then driving it back to a state through a physics simulation that has to settle before the next step is valid.

None of that is visible to the player, and all of it is the actual cost of the interaction being physical. Interaction realism is not free, and the bill arrives in your save system. Pay it deliberately or do not order it.