void OverCamera(Camera cam) { if (cam != null) { int w = cam.pixelWidth; int h = cam.pixelHeight; #if UNITY_IPHONE || UNITY_ANDROID float ss = Mathf.Sqrt(w * w + h * h); #if UNITY_EDITOR ss /= 334; #else ss /= Screen.dpi; #endif float ps = 1; float r = (ss - A.x) / (D.x - A.x); if (r < 0) { ps = A.y; } else if (r > 1) { ps = D.y; } else { ps = MathH.BezierPoint(r, ref A, ref B, ref C, ref D).y; } PhysicalScale = ps; #else if (scaleType == ScaleType.FillX) { PhysicalScale = w / DesignSize.x; } else if (scaleType == ScaleType.FillY) { PhysicalScale = h / DesignSize.y; } float ps = PhysicalScale; if (ps < 0.01f) { ps = 0.01f; } #endif m_sizeDelta.x = w / ps; m_sizeDelta.y = h / ps; float near = cam.nearClipPlane + NearPlane; if (cam.orthographic) { float os = cam.orthographicSize * 2; float s = os / (float)h; s *= ps; transform.localScale = new Vector3(s, s, s); Vector3 pos = cam.transform.position; Vector3 forward = cam.transform.forward; transform.position = pos + forward * near; transform.forward = forward; } else { float s = 2 / (float)h; float o = MathH.Tan(cam.fieldOfView) / near; s /= o; s *= ps; transform.localScale = new Vector3(s, s, s); Vector3 pos = cam.transform.position; Vector3 forward = cam.transform.forward; transform.position = pos + forward * near; transform.forward = forward; } transform.rotation = cam.transform.rotation; } }