public static bool Raycast(Vector3 inPos, ref RaycastHit hit) { for (int i = 0; i < UICamera.mList.Count; i++) { UICamera uicamera = UICamera.mList[i]; if (uicamera.enabled && NGUITools.GetActive(uicamera.gameObject)) { UICamera.currentCamera = uicamera.cachedCamera; Vector3 vector = UICamera.currentCamera.ScreenToViewportPoint(inPos); if (vector.x >= 0f && vector.x <= 1f && vector.y >= 0f && vector.y <= 1f) { Ray ray = UICamera.currentCamera.ScreenPointToRay(inPos); int layerMask = UICamera.currentCamera.cullingMask & uicamera.eventReceiverMask; float distance = (uicamera.rangeDistance <= 0f) ? (UICamera.currentCamera.farClipPlane - UICamera.currentCamera.nearClipPlane) : uicamera.rangeDistance; if (uicamera.clipRaycasts) { RaycastHit[] array = Physics.RaycastAll(ray, distance, layerMask); if (array.Length > 1) { Array.Sort <RaycastHit>(array, (RaycastHit r1, RaycastHit r2) => r1.distance.CompareTo(r2.distance)); int j = 0; int num = array.Length; while (j < num) { if (UICamera.IsVisible(ref array[j])) { hit = array[j]; return(true); } j++; } } else if (array.Length == 1 && UICamera.IsVisible(ref array[0])) { hit = array[0]; return(true); } } else if (Physics.Raycast(ray, out hit, distance, layerMask)) { return(true); } } } } return(false); }