static bool GetNearestHitFromPhysicsScene(Ray ray, PhysicsScene physicsScene, int cullingMask, bool ignorePrefabInstance, ref RaycastHit raycastHit) { float maxDist = raycastHit.distance; int numHits = physicsScene.Raycast(ray.origin, ray.direction, s_RaySnapHits, maxDist, cullingMask, QueryTriggerInteraction.Ignore); // We are not sure at this point if the hits returned from RaycastAll are sorted or not, so go through them all float nearestHitDist = maxDist; int nearestHitIndex = -1; if (ignoreRaySnapObjects != null) { for (int i = 0; i < numHits; i++) { if (s_RaySnapHits[i].distance < nearestHitDist) { Transform tr = s_RaySnapHits[i].transform; if (ignorePrefabInstance && GameObjectUtility.IsPrefabInstanceHiddenForInContextEditing(tr.gameObject)) { continue; } bool ignore = false; for (int j = 0; j < ignoreRaySnapObjects.Length; j++) { if (tr == ignoreRaySnapObjects[j]) { ignore = true; break; } } if (ignore) { continue; } nearestHitDist = s_RaySnapHits[i].distance; nearestHitIndex = i; } } } else { for (int i = 0; i < numHits; i++) { if (s_RaySnapHits[i].distance < nearestHitDist) { nearestHitDist = s_RaySnapHits[i].distance; nearestHitIndex = i; } } } if (nearestHitIndex >= 0) { raycastHit = s_RaySnapHits[nearestHitIndex]; return(true); } else { return(false); } }