Get the GUI element at a specific screen position.
static public int HitTest(IntPtr l) { try { UnityEngine.GUILayer self = (UnityEngine.GUILayer)checkSelf(l); UnityEngine.Vector3 a1; checkType(l, 2, out a1); var ret = self.HitTest(a1); pushValue(l, true); pushValue(l, ret); return(2); } catch (Exception e) { return(error(l, e)); } }
private static void HitTestLegacyGUI(Camera camera, Vector3 mousePosition, ref SendMouseEvents.HitInfo hitInfo) { GUILayer component = camera.GetComponent <GUILayer>(); if (component) { GUIElement gUIElement = component.HitTest(mousePosition); if (gUIElement) { hitInfo.target = gUIElement.gameObject; hitInfo.camera = camera; } else { hitInfo.target = null; hitInfo.camera = null; } } }
private static void DoSendMouseEvents(int skipRTCameras) { Vector3 mousePosition = Input.mousePosition; int allCamerasCount = Camera.allCamerasCount; if (SendMouseEvents.m_Cameras == null || SendMouseEvents.m_Cameras.Length != allCamerasCount) { SendMouseEvents.m_Cameras = new Camera[allCamerasCount]; } Camera.GetAllCameras(SendMouseEvents.m_Cameras); for (int i = 0; i < SendMouseEvents.m_CurrentHit.Length; i++) { SendMouseEvents.m_CurrentHit[i] = default(SendMouseEvents.HitInfo); } if (!SendMouseEvents.s_MouseUsed) { Camera[] cameras = SendMouseEvents.m_Cameras; for (int j = 0; j < cameras.Length; j++) { Camera camera = cameras[j]; if (!(camera == null) && (skipRTCameras == 0 || !(camera.targetTexture != null))) { if (camera.pixelRect.Contains(mousePosition)) { GUILayer component = camera.GetComponent <GUILayer>(); if (component) { GUIElement gUIElement = component.HitTest(mousePosition); if (gUIElement) { SendMouseEvents.m_CurrentHit[0].target = gUIElement.gameObject; SendMouseEvents.m_CurrentHit[0].camera = camera; } else { SendMouseEvents.m_CurrentHit[0].target = null; SendMouseEvents.m_CurrentHit[0].camera = null; } } if (camera.eventMask != 0) { Ray ray = camera.ScreenPointToRay(mousePosition); float z = ray.direction.z; float distance = (!Mathf.Approximately(0f, z)) ? Mathf.Abs((camera.farClipPlane - camera.nearClipPlane) / z) : float.PositiveInfinity; GameObject gameObject = camera.RaycastTry(ray, distance, camera.cullingMask & camera.eventMask); if (gameObject != null) { SendMouseEvents.m_CurrentHit[1].target = gameObject; SendMouseEvents.m_CurrentHit[1].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[1].target = null; SendMouseEvents.m_CurrentHit[1].camera = null; } GameObject gameObject2 = camera.RaycastTry2D(ray, distance, camera.cullingMask & camera.eventMask); if (gameObject2 != null) { SendMouseEvents.m_CurrentHit[2].target = gameObject2; SendMouseEvents.m_CurrentHit[2].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[2].target = null; SendMouseEvents.m_CurrentHit[2].camera = null; } } } } } } for (int k = 0; k < SendMouseEvents.m_CurrentHit.Length; k++) { SendMouseEvents.SendEvents(k, SendMouseEvents.m_CurrentHit[k]); } SendMouseEvents.s_MouseUsed = false; }
private static void DoSendMouseEvents(int skipRTCameras) { Vector3 mousePosition = Input.mousePosition; int allCamerasCount = Camera.allCamerasCount; if (SendMouseEvents.m_Cameras == null || SendMouseEvents.m_Cameras.Length != allCamerasCount) { SendMouseEvents.m_Cameras = new Camera[allCamerasCount]; } Camera.GetAllCameras(SendMouseEvents.m_Cameras); for (int index = 0; index < SendMouseEvents.m_CurrentHit.Length; ++index) { SendMouseEvents.m_CurrentHit[index] = new SendMouseEvents.HitInfo(); } if (!SendMouseEvents.s_MouseUsed) { foreach (Camera camera in SendMouseEvents.m_Cameras) { if (!((Object)camera == (Object)null) && (skipRTCameras == 0 || !((Object)camera.targetTexture != (Object)null)) && camera.pixelRect.Contains(mousePosition)) { GUILayer component = camera.GetComponent <GUILayer>(); if ((bool)((Object)component)) { GUIElement guiElement = component.HitTest(mousePosition); if ((bool)((Object)guiElement)) { SendMouseEvents.m_CurrentHit[0].target = guiElement.gameObject; SendMouseEvents.m_CurrentHit[0].camera = camera; } else { SendMouseEvents.m_CurrentHit[0].target = (GameObject)null; SendMouseEvents.m_CurrentHit[0].camera = (Camera)null; } } if (camera.eventMask != 0) { Ray ray = camera.ScreenPointToRay(mousePosition); float z = ray.direction.z; float distance = !Mathf.Approximately(0.0f, z) ? Mathf.Abs((camera.farClipPlane - camera.nearClipPlane) / z) : float.PositiveInfinity; GameObject gameObject1 = camera.RaycastTry(ray, distance, camera.cullingMask & camera.eventMask); if ((Object)gameObject1 != (Object)null) { SendMouseEvents.m_CurrentHit[1].target = gameObject1; SendMouseEvents.m_CurrentHit[1].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[1].target = (GameObject)null; SendMouseEvents.m_CurrentHit[1].camera = (Camera)null; } GameObject gameObject2 = camera.RaycastTry2D(ray, distance, camera.cullingMask & camera.eventMask); if ((Object)gameObject2 != (Object)null) { SendMouseEvents.m_CurrentHit[2].target = gameObject2; SendMouseEvents.m_CurrentHit[2].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { SendMouseEvents.m_CurrentHit[2].target = (GameObject)null; SendMouseEvents.m_CurrentHit[2].camera = (Camera)null; } } } } } for (int i = 0; i < SendMouseEvents.m_CurrentHit.Length; ++i) { SendMouseEvents.SendEvents(i, SendMouseEvents.m_CurrentHit[i]); } SendMouseEvents.s_MouseUsed = false; }
private static void DoSendMouseEvents(int skipRTCameras) { Vector3 mousePosition = Input.mousePosition; int allCamerasCount = Camera.allCamerasCount; if ((m_Cameras == null) || (m_Cameras.Length != allCamerasCount)) { m_Cameras = new Camera[allCamerasCount]; } Camera.GetAllCameras(m_Cameras); for (int i = 0; i < m_CurrentHit.Length; i++) { m_CurrentHit[i] = new HitInfo(); } if (!s_MouseUsed) { foreach (Camera camera in m_Cameras) { if (((camera != null) && ((skipRTCameras == 0) || (camera.targetTexture == null))) && camera.pixelRect.Contains(mousePosition)) { GUILayer component = camera.GetComponent <GUILayer>(); if (component != null) { GUIElement element = component.HitTest(mousePosition); if (element != null) { m_CurrentHit[0].target = element.gameObject; m_CurrentHit[0].camera = camera; } else { m_CurrentHit[0].target = null; m_CurrentHit[0].camera = null; } } if (camera.eventMask != 0) { Ray ray = camera.ScreenPointToRay(mousePosition); float z = ray.direction.z; float distance = !Mathf.Approximately(0f, z) ? Mathf.Abs((float)((camera.farClipPlane - camera.nearClipPlane) / z)) : float.PositiveInfinity; GameObject obj2 = camera.RaycastTry(ray, distance, camera.cullingMask & camera.eventMask); if (obj2 != null) { m_CurrentHit[1].target = obj2; m_CurrentHit[1].camera = camera; } else if ((camera.clearFlags == CameraClearFlags.Skybox) || (camera.clearFlags == CameraClearFlags.Color)) { m_CurrentHit[1].target = null; m_CurrentHit[1].camera = null; } GameObject obj3 = camera.RaycastTry2D(ray, distance, camera.cullingMask & camera.eventMask); if (obj3 != null) { m_CurrentHit[2].target = obj3; m_CurrentHit[2].camera = camera; } else if ((camera.clearFlags == CameraClearFlags.Skybox) || (camera.clearFlags == CameraClearFlags.Color)) { m_CurrentHit[2].target = null; m_CurrentHit[2].camera = null; } } } } } for (int j = 0; j < m_CurrentHit.Length; j++) { SendEvents(j, m_CurrentHit[j]); } s_MouseUsed = false; }
private static void DoSendMouseEvents(int skipRTCameras) { Vector3 mousePosition = Input.mousePosition; int allCamerasCount = Camera.allCamerasCount; if (m_Cameras == null || m_Cameras.Length != allCamerasCount) { m_Cameras = new Camera[allCamerasCount]; } Camera.GetAllCameras(m_Cameras); for (int i = 0; i < m_CurrentHit.Length; i++) { m_CurrentHit[i] = default(HitInfo); } if (!s_MouseUsed) { Camera[] cameras = m_Cameras; foreach (Camera camera in cameras) { if (camera == null || (skipRTCameras != 0 && camera.targetTexture != null)) { continue; } int targetDisplay = camera.targetDisplay; Vector3 vector = Display.RelativeMouseAt(mousePosition); if (vector != Vector3.zero) { int num = (int)vector.z; if (num != targetDisplay) { continue; } float num2 = Screen.width; float num3 = Screen.height; if (targetDisplay > 0 && targetDisplay < Display.displays.Length) { num2 = Display.displays[targetDisplay].systemWidth; num3 = Display.displays[targetDisplay].systemHeight; } Vector2 vector2 = new Vector2(vector.x / num2, vector.y / num3); if (vector2.x < 0f || vector2.x > 1f || vector2.y < 0f || vector2.y > 1f) { continue; } } else { vector = mousePosition; if (!camera.pixelRect.Contains(vector)) { continue; } } GUILayer component = camera.GetComponent <GUILayer>(); if ((bool)component) { GUIElement gUIElement = component.HitTest(vector); if ((bool)gUIElement) { m_CurrentHit[0].target = gUIElement.gameObject; m_CurrentHit[0].camera = camera; } else { m_CurrentHit[0].target = null; m_CurrentHit[0].camera = null; } } if (camera.eventMask != 0) { Ray ray = camera.ScreenPointToRay(vector); Vector3 direction = ray.direction; float z = direction.z; float distance = (!Mathf.Approximately(0f, z)) ? Mathf.Abs((camera.farClipPlane - camera.nearClipPlane) / z) : float.PositiveInfinity; GameObject gameObject = camera.RaycastTry(ray, distance, camera.cullingMask & camera.eventMask); if (gameObject != null) { m_CurrentHit[1].target = gameObject; m_CurrentHit[1].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { m_CurrentHit[1].target = null; m_CurrentHit[1].camera = null; } GameObject gameObject2 = camera.RaycastTry2D(ray, distance, camera.cullingMask & camera.eventMask); if (gameObject2 != null) { m_CurrentHit[2].target = gameObject2; m_CurrentHit[2].camera = camera; } else if (camera.clearFlags == CameraClearFlags.Skybox || camera.clearFlags == CameraClearFlags.Color) { m_CurrentHit[2].target = null; m_CurrentHit[2].camera = null; } } } } for (int k = 0; k < m_CurrentHit.Length; k++) { SendEvents(k, m_CurrentHit[k]); } s_MouseUsed = false; }