-
Notifications
You must be signed in to change notification settings - Fork 6
GoGo
Overview
This VR interaction technique allows the user to extend their reach beyond their arm length. It does this by utilizing a non-linear mapping of the between the real location of the remote and the virtual remote. As the user extends out their arm the virtual remote will extend further following this mapping.

Source paper of the technique:
Poupyrev, Ivan & Billinghurst, Mark & Weghorst, Suzanne & Ichikawa, Tadao. (1998). The Go-Go Interaction Technique: Non-linear Mapping for Direct Manipulation in VR. Proc. of UIST'96.
Our implementation
Our implementation of this technique in unity follows the papers method exactly as there was plenty of information describing how this technique was built with no technical limitations. To do it we utilized a "Shadow controller" for each hand which matches the position/rotation of the real controller positions. These shadow controllers would then steal the model of the real controllers and take their place as the visible hands. They then utilizes the non-linear mapping function to make the go-go work.
Use by manually attaching
To manually attach the GoGo to the Camerarig VR components if the auto-attach fails for each hand:
- Drag onto GoGoShadow script:
- The CameraRig onto camerarig
- The relevant controller onto "The Controller" and "Tracked Obj"
- The controller model in the scene under the controller onto the Model
- Drag onto the GrabObject script:
- The relevant controller onto the "Tracked Obj"
- Drag left and right hand in GoGo Controller to left and right VR Controllers
Inspector parameters
For left and right hand GoGo Shadow:
| Parameter | Default | Description |
|---|---|---|
| Arm Length calculator | Off | When on the user can calibrate their arm length in-game by pressing down on the touch pad while |
| Arm Length | 0.66 | When the arm length calculator is off, the arm length is manually set in the inspector. |
| Distance from head to chest | 0.3 | GoGo extension is from the chest. This is the manual distance down from the camera head to calculate chest location. |
| The Model | Model | The controller model which is a child of the controller to be cloned when GoGo is in use |
| Extension variable | 10 | The higher the extension variable the further the GoGo will extend at a full arm extension. |
For left and right hand GrabObject
| Parameter | Default | Description |
|---|---|---|
| Interaction Layers | PickableObject | The layers that the technique can interact with |
| Interaction Type | Manipulation | When set to manipulation GoGo can move objects via fixed joints. When pure selection it will just send an event that it has selected and place the object into a public variable. |
| Selection | None | The publicly accessible variable showing which object is selected. |
| Selected Object() | Empty | Event Invoked when an object is selected |
| Hovered() | Empty | Event Invoked when an object is hovered over |
| UnHovered() | Empty | Event Invoked when an object ceases being hovered over |
Test/Example scenes
Basic test scene with a couple of objects and technique under:
- Assets/GoGo/Scenes
Major example scene under:
- Assets/Technique Example Scenes/Scenes/GoGoexample
Wiki
Hand Grasping
Enhanced Grasping
Volume-based Pointing
Enhanced Pointing
Symmetric Bi-manual
Asymmetric Bi-manual
Progressive refinement