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; }