// If the controller we are tracking changes index, update private void OnControllerIndexChanged(ETrackedControllerRole role, uint index) { if (_anchorDevice == MountDevice.LeftController && role == ETrackedControllerRole.LeftHand) { _anchorDevice = MountDevice.World; // This will trick the system into reattaching the overlay } else if (_anchorDevice == MountDevice.RightController && role == ETrackedControllerRole.RightHand) { _anchorDevice = MountDevice.World; // This will trick the system into reattaching the overlay } }
/// <summary> /// Attach the Overlay to [device] at [scale] size with offset [offset], and base position [point]. /// [point] isn't used for HMD or World, and can be ignored. /// </summary> /// <param name="device"></param> /// <param name="scale"></param> /// <param name="offset"></param> /// <param name="point"></param> public void AttachTo(MountDevice device, float scale, Vector3 offset, MountLocation point = MountLocation.Center) { // Update Overlay Anchor position GetOverlayPosition(); // Update cached values _anchorDevice = device; AnchorDevice = device; _anchorPoint = point; AnchorPoint = point; _anchorOffset = offset; AnchorOffset = offset; Scale = scale; // Attach Overlay switch (device) { case MountDevice.Screen: _anchor = OpenVR.k_unTrackedDeviceIndexInvalid; OverlayReference.transform.localPosition = -offset; OverlayReference.transform.localRotation = Quaternion.identity; break; case MountDevice.World: _anchor = OpenVR.k_unTrackedDeviceIndexInvalid; OverlayReference.transform.localPosition = -offset; OverlayReference.transform.localRotation = Quaternion.identity; break; case MountDevice.LeftController: _anchor = HOTK_TrackedDeviceManager.Instance.LeftIndex; AttachToController(point, offset); break; case MountDevice.RightController: _anchor = HOTK_TrackedDeviceManager.Instance.RightIndex; AttachToController(point, offset); break; default: throw new ArgumentOutOfRangeException("device", device, null); } }
/// <summary> /// Attach the Overlay to [device] at [scale], and base position [point]. /// [point] isn't used for HMD or World, and can be ignored. /// </summary> /// <param name="device"></param> /// <param name="scale"></param> /// <param name="point"></param> public void AttachTo(MountDevice device, float scale, MountLocation point = MountLocation.Center) { AttachTo(device, scale, Vector3.zero, point); }