private bool IsPointingAtPanel(VrDebugPanel panel) { float angle = Vector3.Angle(targetHand.transform.forward, panel.center.forward); float dot = Vector3.Dot(targetHand.transform.forward, panel.center.forward); return(Mathf.Abs(angle) < 30.0f && dot < 0.0f); }
private float CalcOpacity(VrDebugPanel panel) { float distance = (this.transform.position - panel.center.position).magnitude; distance = Mathf.Clamp(distance, 0.0f, 1.0f); return(distance); }
// use screen midpoint as locked pointer location, enabling look location to be the "mouse" private bool GetLookPointerEventData(int index) { if (PointEvents[index] == null) { PointEvents[index] = new PointerEventData(base.eventSystem); } else { PointEvents[index].Reset(); } PointEvents[index].delta = Vector2.zero; PointEvents[index].position = new Vector2(Screen.width / 2, Screen.height / 2); PointEvents[index].scrollDelta = Vector2.zero; Ray ray = ControllerCamera.ScreenPointToRay(PointEvents[index].position); LastRays [index] = ray; base.eventSystem.RaycastAll(PointEvents[index], m_RaycastResultCache); if (ignoreOverlayCanvases) { // Search through the raycast results and discard any that are actually on an overlay canvas for (int i = m_RaycastResultCache.Count - 1; i >= 0; i--) { Canvas objCanvas = FindParentCanvas(m_RaycastResultCache[i].gameObject); if (objCanvas != null && (objCanvas.renderMode == RenderMode.ScreenSpaceOverlay || objCanvas.renderMode == RenderMode.ScreenSpaceCamera)) { m_RaycastResultCache.RemoveAt(i); } else if (objCanvas.transform.parent != null) { // Hack: Remove any hits that aren't part of one of our debug panels GameObject canvasParent = objCanvas.transform.parent.gameObject; VrDebugPanel debugPanel = canvasParent.GetComponent <VrDebugPanel>(); if (debugPanel == null) { m_RaycastResultCache.RemoveAt(i); } } } } PointEvents[index].pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache); if (PointEvents[index].pointerCurrentRaycast.gameObject != null) { guiHit = true; //gets set to false at the beginning of the process event } m_RaycastResultCache.Clear(); return(true); }