-
VIVE Wave
-
SDK
- What is VIVE Wave?
- Where can I download the Wave SDK?
- How do I access the Wave Developer Community forum?
- How do I fix compile or build errors after importing a custom package?
- How do I put controllers into a scene?
- How do I switch heads with different tracking pose settings in the same scene?
- How do I switch between 6DoF and 3DoF in the same scene?
- Why can't I receive events or click on the system overlay?
- How do I get controller objects in runtime?
- How do I show or hide the controller pointer?
- How do I change the controller model object from Root to Emitter?
- How do I know if a controller sends an event?
- How do I set the controller position in a rotation-only environment?
- How do I display only one controller in a scene?
- How do I find out the distance of the head from the floor?
-
Distributing your app
-
-
VIVE SRWorks
-
VIVE Eye and Facial Tracking
- Where can I download the VIVE Eye and Facial Tracking SDK and runtime?
- How do I calibrate eye tracking?
- What drivers are required for VIVE Eye and Facial Tracking?
- How do I update the VIVE Eye and Facial Tracking runtime?
- How do I update the VIVE Pro Eye firmware?
- When starting my app, why does Windows prompt for permission to make changes?
- The eye camera version shows "N/A". Is that a problem?
- If I encountered other eye tracking issues, what should I do?
- I encountered eye calibration initialization and OpenCL errors. What should I do?
- Can eye tracking work when using the VIVE Wireless Adapter?
- If the user has visual impairment, what happens to the calibration data?
- What's the trackable FOV? How about the tracking accuracy?
-
VIVE Hand Tracking
- Does the Hand Tracking SDK support VIVE Cosmos?
- Are there prebuilt samples available, and where can I find them?
- My Unity build throws this exception: "DllNotFoundException: aristo_interface". What should I do?
- I encountered this error: "Start Detection Error: Camera". What should I do?
- I encountered this error: "Start Detection Error: OpenCL". What should I do?
- Is there a way to improve hand detection accuracy?
-
VIVE 3DSP Audio
- Are there tutorials for the VIVE 3DSP Audio SDK?
- How do I know if there's a public release for the SDK?
- How do I quickly enable VIVE 3DSP Audio SDK to add enhanced support for 3D sound effects in Unity?
- Does 3DSP Audio SDK have any hardware dependencies?
- Can VIVE 3DSP Audio SDK be used in conjunction with other spatialization SDKs?
-
VIVEPORT
-
VIVE Business Streaming
-
Facial tracking
-
Hand tracking
-
VIVE Wrist Tracker
- How do I use VIVE Wrist Tracker with VIVE Focus 3 for PC VR apps?
- How do I set VIVE Wrist Tracker options?
- How do I use VIVE Wrist Tracker as VIVE Tracker?
- How do I use VIVE Wrist Tracker for hand tracking?
- How do I use VIVE Wrist Tracker as VIVE Tracker for Native or Unity?
- How do I use VIVE Wrist Tracker as VIVE Tracker for Unreal Engine?
-
How do I switch heads with different tracking pose settings in the same scene?
If you created 2 or more heads with different tracking pose settings, the head will use the wrong pose data when they are switched without activating one head and deactivating the other heads.
Follow the steps below to avoid this problem.
There are two ways listed below on how to find the head in the same scene. These take advantage of the style of the tracking origin, TrackingUniverseSeated and TrackingUniverseStanding to switch two heads. Use the public flag HowToFindHead of ChooseDoF to select which find method you want to use.
public class ChooseDoF : MonoBehaviour { public ETrackingUniverseOrigin trackingSpace = ETrackingUniverseOrigin.TrackingUniverseSeated; public bool HowToFindHead = false; void OnEnable() { if (HowToFindHead) method1(); else method2(); } // For method 1, it makes use of the Transform function to find the head you would like to take. void method1() { #if UNITY_5_5_OR_NEWER // Global find GameObject body1 = transform.root.Find("Body1").gameObject; GameObject body2 = transform.root.Find("Body2").gameObject; #else // Children find GameObject body1 = transform.Find("Body1").gameObject; GameObject body2 = transform.FindChild("Body2").gameObject; #endif if (trackingSpace == ETrackingUniverseOrigin.TrackingUniverseSeated) body1.SetActive(true); else body2.SetActive(true); } // For method 2, it traverses the component list to find the head you would like to take. void method2() { // Children find var list = GetComponentsInChildren<WaveVR_Render>(true); foreach (WaveVR_Render render in list) { var obj = render.transform.parent.gameObject; if (trackingSpace == ETrackingUniverseOrigin.TrackingUniverseSeated) { if (obj.name == "Body1") { obj.SetActive(true); break; } } else { if (obj.name == "Body2") { obj.SetActive(true); break; } } } } }
-
Before running, all heads are inactive.
-
Under
GameObject, do one of the following:
- In
Tracking Space, select
Tracking Universe Seated to make the
Body1 Head active.
- In
Tracking Space, select
Tracking Universe Standing to make the
Body2 Head active.
- In
Tracking Space, select
Tracking Universe Seated to make the
Body1 Head active.
Was this helpful?
Yes
No
Submit
Thank you! Your feedback helps others to see the most helpful information.