Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
ArmSwinger
Information
Type Standing, Room-scale
Required Devices Motion-tracked controllers
Description Players move by swinging their arms as if they are running but do not move their legs.
Pros More immersive than teleportation, works in most types of games and experiences
Cons Cannot use weapons or perform actions with hands while moving.
Creator Electric Night Owl, LLC

ArmSwinger is a Locomotion Method for virtual reality and an open-source software library of the same name that implements it. The user holds a button on each tracked motion controller and swings their arms, and the library turns the controllers' movement into artificial movement through the virtual world: speed follows how fast the controllers move, and direction follows where they point.[1] The library was developed by Electric Night Owl, LLC, with Keller (KJack) as lead developer, and was built on Unity 5.4 and tested with the SteamVR Unity plugin 1.1.0 and the HTC Vive.[2][1]

Version 1.0 was released on 4 August 2016 on GitHub under the MIT License and as a paid package on the Unity Asset Store.[3][4] The final release, version 1.3.2, followed in November 2016. The Asset Store package has since been deprecated, and the author stated in 2018 that they were no longer working on the project.[3][4][5] The GitHub source remains public and has been used by researchers as a ready-made arm-swinging technique in locomotion studies.[6][7]

Reviewed 27 September 2026. Checked the README, GitHub release dates, issues 28 and 54, the Unity Asset Store listing and release notes, the UploadVR report and quotes, the Loup, Wilson and Cannavo papers, the Diegoli thesis, the VRTK credit and the trailer video. About review dates.

History

In a statement emailed to UploadVR and published on 2 August 2016, Keller (KJack), the lead developer, announced that version 1.0 would be released that week on the Unity Asset Store and GitHub. The statement described the system as letting players "move around the game world freely by swinging your arms and pointing your controllers in the direction you'd like to go," and said that most people who had tried release candidate versions, in person and through the /r/vive community, "have reported no nausea whatsoever using this system." It also said that several protection methods had been built in to keep the player in bounds.[2] UploadVR presented the library as an alternative to the teleportation ("blink") and analog stick movement then common in consumer VR games, and to hardware such as the Virtuix Omni treadmill.[2]

The GitHub and Asset Store versions have the same scripts, features and documentation. The Asset Store package adds an example scene with ramps, walls, uneven terrain and an in-game settings panel (the "Wall o' Settings"), and the purchase included priority e-mail support.[1] The Asset Store listing names the package "ArmSwinger VR Locomotion for SteamVR", lists Unity 5.4.1 as its supported version and requires the SteamVR Plugin for Unity.[4]

Development was concentrated in 2016:

Version Release date Main changes
1.0 4 August 2016 Initial release
1.0.1 7 August 2016 Fixed an infinite rewind bug; combined two distance checks so that unsafe positions are not saved
1.0.2 9 August 2016 Push back for instant climbing and falling working again
1.1 12 August 2016 Players no longer get stuck in walls at high speed; removed the wall clip speed penalty; automatic adjustment of Unity's fixed timestep to 0.0111 (90 ticks per second)
1.2 23 August 2016 Inspector headers for each settings section; improved pause handling
1.3 24 September 2016 Custom activation button (Menu, Grips, Touchpad Click or Trigger)
1.3.1 3 November 2016 Custom button changes merged; fixes for infinite rewinds when the headset is active but not tracking
1.3.2 3 November 2016 Fixed rewinds and push backs moving the player incorrectly when the CameraRig was rotated

Release dates from the GitHub releases page; change descriptions from the Asset Store release notes.[3][4]

The last commits to the repository date from 2017.[7] After Valve replaced the old SteamVR input system with an action-based system in version 2.0 of its Unity plugin, a user reported in November 2018 that ArmSwinger needed updating; the author (GitHub user kjack9) replied on 29 November 2018 that they were no longer working on the project and invited pull requests.[5] Researchers who reused the code in 2021 had to rewrite its input handling for the newer SteamVR action system.[7] The Unity Asset Store now marks the package as deprecated: it can no longer be bought, although existing owners can still use it.[4]

How it works

Arm swinging is started by holding the activation button, the grip by default, on one or both controllers. While it is active, the script converts the controllers' X, Y and Z movement into movement of the play space. Speed depends on how fast one or both controllers move, and direction on where they point, so the user can turn their head freely while walking without changing course.[1] A curve set by the developer maps controller speed to movement speed, with configurable maximum speeds and separate multipliers for one-controller and two-controller swinging.[1] The library therefore measures controller velocity rather than detecting swings as such; swinging the arms is the most practical way to produce steady movement in a consistent direction.[7]

The "Swing Mode" setting decides which buttons start arm swinging and which controllers set speed and direction:[1]

Swing mode Activation Controllers used for speed and direction
Both Buttons Both Controllers Both controller buttons Both
Left Button Both Controllers Left controller button Both
Right Button Both Controllers Right controller button Both
One Button Same Controller Either controller button The controller whose button is held; can be combined with the other controller
One Button Same Controller Exclusive Either controller button The controller whose button is held; the other button does nothing until the first is released

Other systems in the library deal with the weaknesses of a simple velocity-based design:[1]

System Purpose and behavior
Controller smoothing Keeps a cache of recent controller movements and uses the lowest value, the average, or the average with the highest value discarded, so that a single-frame tracking glitch is not read as a very hard swing that jerks the player forward
Moving inertia Keeps momentum when both controllers reach the top of a swing at the same moment, which would otherwise cause a brief stop; it is a linear simulation, not physics
Stopping inertia Slows the player gradually after arm swinging ends instead of stopping at once
Play area height adjustment Casts a ray down from the headset every frame and moves the play area so that the physical floor matches the virtual terrain under the headset; it can be limited to times when the player is arm swinging, and large height changes are hidden behind a fade
Out-of-bounds protection Detects the headset entering walls or terrain, climbing or falling down slopes that are too steep, walking along steep slopes, and leaving the world; wall clip detection adds a sphere collider and rigidbody to the headset
Rewind and push back On an out-of-bounds event, either rewinds the player to an earlier safe position with a fade out and fade in, or pushes back the play area so that the head cannot enter the wall

For movement and wall collisions to work correctly, Unity's fixed timestep must be 0.0111 seconds (90 updates per second) or less; an "Auto Adjust Fixed Timestep" setting lowers it automatically when it is higher.[1]

Additional Information

Players move forward by swinging their arms as if they are running but do not move their legs. Players move backward by swinging their arms above their shoulders, still keeping their legs in place.[8] Players move faster (run) by swinging their arms faster and move slower (walk) by swinging their arms slower.[1] In the released versions, walking backwards requires either turning the controllers around or this over-the-shoulders method; a more natural reverse control was proposed in the project's issue tracker but not implemented.[8]

reddit link

github link

Unity asset store link

Problems

The main drawback reported in research is comfort. Guillaume Loup and Emilie Loup-Escande compared an ArmSwinger travel mode with teleportation on an HTC Vive, noting that arm swinging had been presented as "more natural" but had not been studied. Completion times did not differ significantly between the two modes, although ArmSwinger appeared more effective. ArmSwinger caused more cybersickness in terms of nausea, a more negative user experience for appealingness, and a higher cognitive load on the physical demand, effort and frustration dimensions.[9]

Studies of arm swinging as a general technique have also compared it with foot-based methods. In a 2016 experiment by Wilson, Kalescky, MacLaughlin and Williams, a walking-in-place method gave better spatial awareness than arm swinging but was not as good as real walking.[10]

Because the library measures controller velocity, a tracking glitch can register as a very fast swing, and the gap in controller speed at the top of each swing can cause stop-start movement.[1] Researchers adapting the code also found that close imitation of natural arm swings could produce a zig-zag path, because users had to keep track of which way their controllers were facing.[7]

Solutions

ArmSwinger's own answers to these problems are the settings described above: controller smoothing against tracking noise, moving and stopping inertia against stop-start motion, and fades that hide rewinds and large height changes.[1] Diegoli's 2021 adaptation at the KTH Royal Institute of Technology also averaged controller orientation over several frames to keep the direction steady on straight paths, and redesigned the speed curve around walking, running and sprinting.[7]

Use in research and other projects

ArmSwinger's public source code has been used as the arm-swinging implementation in research projects. The locomotion testbed by Cannavò and colleagues, published in IEEE Transactions on Visualization and Computer Graphics, used the public ArmSwinger method as its arm-swinging condition and compared it with walking in place, the Cyberith Virtualizer and a joystick on an HTC Vive. In that implementation, movement direction is the average orientation of the two controllers, which lets the user walk in one direction while looking in another.[6] Diegoli's KTH degree project (2021) built on the GitHub code and added audio and haptic feedback that responds to the user's speed and the type of surface being walked on.[7] The documentation for the "Move In Place" locomotion script in the VRTK virtual reality toolkit credits "KJack (author of Arm Swinger) for additional work."[11]

See also

References

  1. ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 Electric Night Owl. "ArmSwinger VR Locomotion System (README)". GitHub. https://github.com/ElectricNightOwl/ArmSwinger/blob/master/README.md. Retrieved 2026-09-27.
  2. ↑ 2.0 2.1 2.2 Joe Durbin (2016-08-02). "ArmSwinger is an Open Source VR Locomotion System Releasing This Week". UploadVR. https://www.uploadvr.com/armswinger-locomotion-system-vr/. Retrieved 2026-09-27.
  3. ↑ 3.0 3.1 3.2 Electric Night Owl. "Releases - ElectricNightOwl/ArmSwinger". GitHub. https://github.com/ElectricNightOwl/ArmSwinger/releases. Retrieved 2026-09-27.
  4. ↑ 4.0 4.1 4.2 4.3 4.4 Electric Night Owl. "ArmSwinger VR Locomotion for SteamVR". Unity Asset Store. https://assetstore.unity.com/packages/tools/input-management/armswinger-vr-locomotion-for-steamvr-67602. Retrieved 2026-09-27.
  5. ↑ 5.0 5.1 "The Code Needs Updated to fit the new steamVR Plugin 2.0.1 (issue #54)". GitHub. 2018-11-23. https://github.com/ElectricNightOwl/ArmSwinger/issues/54. Retrieved 2026-09-27.
  6. ↑ 6.0 6.1 Alberto Cannavò, Davide Calandra, F. Gabriele Pratticò, Valentina Gatteschi, Fabrizio Lamberti (2021). "An Evaluation Testbed for Locomotion in Virtual Reality". IEEE Transactions on Visualization and Computer Graphics, vol. 27, no. 3, pp. 1871-1889. https://doi.org/10.1109/TVCG.2020.3032440. Retrieved 2026-09-27.
  7. ↑ 7.0 7.1 7.2 7.3 7.4 7.5 7.6 Guilherme Neto Diegoli (2021). "Immersive Locomotion for Virtual Reality Using Arm Swings and Multimodal Feedback". KTH Royal Institute of Technology (degree project). https://www.diva-portal.org/smash/get/diva2:1634124/FULLTEXT01.pdf. Retrieved 2026-09-27.
  8. ↑ 8.0 8.1 kjack9 (2016-08-08). "Create a more natural way to walk backwards (issue #28)". GitHub. https://github.com/ElectricNightOwl/ArmSwinger/issues/28. Retrieved 2026-09-27.
  9. ↑ Guillaume Loup, Emilie Loup-Escande (2018-09-14). "Effects of Travel Modes on Performances and User Comfort: A Comparison between ArmSwinger and Teleporting". International Journal of Human-Computer Interaction, vol. 35, no. 14, pp. 1270-1278. https://doi.org/10.1080/10447318.2018.1519164. Retrieved 2026-09-27.
  10. ↑ Preston Tunnell Wilson, William Kalescky, Ansel MacLaughlin, Betsy Williams (2016). "VR locomotion: walking > walking in place > arm swinging". Proceedings of the 15th ACM SIGGRAPH Conference on Virtual-Reality Continuum and Its Applications in Industry, pp. 243-249. https://doi.org/10.1145/3013971.3014010. Retrieved 2026-09-27.
  11. ↑ "VRTK_MoveInPlace". VRTK documentation. https://vrtoolkit.readme.io/docs/vrtk_moveinplace. Retrieved 2026-09-27.