/// @endcond private void CastRayFromGaze() { //Vector2 headPose = NormalizedCartesianToSpherical(GvrViewer.Instance.HeadPose.Orientation*Vector3.forward); if (pointerData == null) { pointerData = new VRPointerEventData(eventSystem); pointerData.controller = m_Controller; //lastHeadPose=headPose; } // Cast a ray into the scene pointerData.Reset(); pointerData.position = new Vector2(hotspot.x * Screen.width, hotspot.y * Screen.height); //eventSystem.RaycastAll(pointerData,m_RaycastResultCache); VRRaycaster caster = VRRaycaster.TryRaycastAll(m_ControllerName, pointerData, m_RaycastResultCache); pointerData.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache); m_RaycastResultCache.Clear(); // if (caster != null) { RaycastResult rr = pointerData.pointerCurrentRaycast; if (rr.gameObject == null) { caster.SetLaserLineDepth(100f); } else { caster.SetLaserLineDepth(rr.distance); } } //pointerData.delta=headPose-lastHeadPose; //lastHeadPose=headPose; }
public static VRRaycaster TryRaycastAll(string name, PointerEventData eventData, List <RaycastResult> raycastResults) { raycastResults.Clear(); VRRaycaster raycaster = null; if (s_InstanceMap.TryGetValue(name, out raycaster)) { int i = 0, imax = s_AllCanvases.Count; if (imax == 0) { s_AllCanvases.AddRange(FindObjectsOfType <Canvas>()); s_AllCanvases.RemoveAll((x) => { BaseRaycaster br = x.GetComponent <BaseRaycaster>(); return(br == null || br is VRRaycaster); }); imax = s_AllCanvases.Count; } if (imax == 0) { raycaster.PhysicsRaycast(eventData, raycastResults); } else { for (; i < imax; ++i) { raycaster.SetCanvas(s_AllCanvases[i]); raycaster.Raycast(eventData, raycastResults); } } } else { //Log.w("VRRaycaster","No such a VRRaycaster(name="+name+") at TryRaycastAll()."); } return(raycaster); }