void ProcessGazePointer(WinMREventData pointerEvent, out bool fired) { fired = false; if (pointerEvent.pointerEnter != null) { // if the ui receiver has changed, reset the gaze delay timer GameObject handler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(pointerEvent.pointerEnter); if (currentLookAtHandler != handler) { currentLookAtHandler = handler; currentLookAtHandlerClickTime = Time.unscaledTime + TimeToGazeClick; } // if we have a handler and it's time to click, do it now if (currentLookAtHandler != null && Time.unscaledTime > currentLookAtHandlerClickTime) { ExecuteEvents.ExecuteHierarchy(currentLookAtHandler, pointerEvent, ExecuteEvents.pointerClickHandler); currentLookAtHandlerClickTime = float.MaxValue; fired = true; pointerEvent.clickTime = Time.unscaledTime; } } else { currentLookAtHandler = null; } }
void DoRandomHitTesting(WinMREventData data) { Ray ray = new Ray(data.pointerCurrentRaycast.worldPosition, data.pointerCurrentRaycast.worldNormal); Debug.DrawRay(ray.origin, ray.direction, Color.green); RaycastHit raycastHit; if (Physics.Raycast(ray, out raycastHit, 10f)) { if (raycastHit.collider != null) { Debug.Log("hit: " + raycastHit.collider.gameObject.name); } } RaycastHit2D hit2D = Physics2D.Raycast(ray.origin, ray.direction, 10f); if (hit2D.collider != null) { Debug.Log("hit: " + hit2D.collider.gameObject.name); } var rayCasterList = GameObject.FindObjectsOfType <UnityEngine.UI.GraphicRaycaster>(); if (rayCasterList != null) { List <RaycastResult> results = new List <RaycastResult>(); foreach (UnityEngine.UI.GraphicRaycaster rc in rayCasterList) { rc.Raycast(data, results); if (results.Count > 0) { foreach (var result in results) { Debug.Log(string.Format("result - valid ({0}), object({1}), module({2})", result.isValid, (result.gameObject == null) ? "null" : result.gameObject.name, result.module.name)); } } } } }