void DrawFocalLengthControl(Rect rect, SerializedProperty property, GUIContent label) { const float hSpace = 2; var FOVProperty = property.FindPropertyRelative(() => m_LensSettingsDef.FieldOfView); float dropdownWidth = (rect.width - EditorGUIUtility.labelWidth) / 4; rect.width -= dropdownWidth + hSpace; float f = CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y); EditorGUI.BeginProperty(rect, label, FOVProperty); f = EditorGUI.FloatField(rect, label, f); f = CameraExtensions.FocalLengthToFieldOfView(Mathf.Max(f, 0.0001f), SensorSize.y); if (!Mathf.Approximately(FOVProperty.floatValue, f)) { FOVProperty.floatValue = Mathf.Clamp(f, 1, 179); } EditorGUI.EndProperty(); rect.x += rect.width + hSpace; rect.width = dropdownWidth; #if CINEMACHINE_HDRP CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists; int preset = -1; if (presets != null) { var focalLength = CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y); var aperture = property.FindPropertyRelative(() => m_LensSettingsDef.Aperture).floatValue; var iso = property.FindPropertyRelative(() => m_LensSettingsDef.Iso).intValue; var shutterSpeed = property.FindPropertyRelative(() => m_LensSettingsDef.ShutterSpeed).floatValue; var bladeCount = property.FindPropertyRelative(() => m_LensSettingsDef.BladeCount).intValue; var curvature = property.FindPropertyRelative(() => m_LensSettingsDef.Curvature).vector2Value; var barrelClipping = property.FindPropertyRelative(() => m_LensSettingsDef.BarrelClipping).floatValue; var anamprphism = property.FindPropertyRelative(() => m_LensSettingsDef.Anamorphism).floatValue; var lensShift = property.FindPropertyRelative(() => m_LensSettingsDef.LensShift).vector2Value; preset = presets.GetMatchingPhysicalPreset( focalLength, iso, shutterSpeed, aperture, bladeCount, curvature, barrelClipping, anamprphism, lensShift); } rect.x -= ExtraSpaceHackWTF(); rect.width += ExtraSpaceHackWTF(); int selection = EditorGUI.Popup(rect, GUIContent.none, preset, m_PhysicalPresetOptions); if (selection == m_PhysicalPresetOptions.Length - 1 && CinemachineLensPresets.Instance != null) { Selection.activeObject = presets = CinemachineLensPresets.Instance; } else if (selection >= 0 && selection < m_PhysicalPresetOptions.Length - 1) { var v = presets.m_PhysicalPresets[selection]; FOVProperty.floatValue = CameraExtensions.FocalLengthToFieldOfView(v.m_FocalLength, SensorSize.y); property.FindPropertyRelative(() => m_LensSettingsDef.Aperture).floatValue = v.Aperture; property.FindPropertyRelative(() => m_LensSettingsDef.Iso).intValue = v.Iso; property.FindPropertyRelative(() => m_LensSettingsDef.ShutterSpeed).floatValue = v.ShutterSpeed; property.FindPropertyRelative(() => m_LensSettingsDef.BladeCount).intValue = v.BladeCount; property.FindPropertyRelative(() => m_LensSettingsDef.Curvature).vector2Value = v.Curvature; property.FindPropertyRelative(() => m_LensSettingsDef.BarrelClipping).floatValue = v.BarrelClipping; property.FindPropertyRelative(() => m_LensSettingsDef.Anamorphism).floatValue = v.Anamorphism; property.FindPropertyRelative(() => m_LensSettingsDef.LensShift).vector2Value = v.LensShift; property.serializedObject.ApplyModifiedProperties(); } #else CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists; int preset = (presets == null) ? -1 : presets.GetMatchingPhysicalPreset( CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y)); rect.x -= ExtraSpaceHackWTF(); rect.width += ExtraSpaceHackWTF(); int selection = EditorGUI.Popup(rect, GUIContent.none, preset, m_PhysicalPresetOptions); if (selection == m_PhysicalPresetOptions.Length - 1 && CinemachineLensPresets.Instance != null) { Selection.activeObject = presets = CinemachineLensPresets.Instance; } else if (selection >= 0 && selection < m_PhysicalPresetOptions.Length - 1) { FOVProperty.floatValue = CameraExtensions.FocalLengthToFieldOfView( presets.m_PhysicalPresets[selection].m_FocalLength, SensorSize.y); property.serializedObject.ApplyModifiedProperties(); } #endif }