Files
JJBB/Assets/Plugins/Cinemachine/Base/Editor/PropertyDrawers/LensSettingsPropertyDrawer.cs
2024-08-23 15:49:34 +08:00

62 lines
2.5 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Reflection;
namespace Cinemachine.Editor
{
[CustomPropertyDrawer(typeof(LensSettingsPropertyAttribute))]
public sealed class LensSettingsPropertyDrawer : PropertyDrawer
{
const int vSpace = 2;
bool mExpanded = true;
LensSettings def = new LensSettings(); // to access name strings
public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
{
float height = EditorGUIUtility.singleLineHeight;
rect.height = height;
mExpanded = EditorGUI.Foldout(rect, mExpanded, label);
if (mExpanded)
{
bool ortho = false;
PropertyInfo pi = typeof(LensSettings).GetProperty(
"Orthographic", BindingFlags.NonPublic | BindingFlags.Instance);
if (pi != null)
ortho = bool.Equals(true, pi.GetValue(GetPropertyValue(property), null));
++EditorGUI.indentLevel;
rect.y += height + vSpace;
if (ortho)
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.OrthographicSize));
else
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.FieldOfView));
rect.y += height + vSpace;
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.NearClipPlane));
rect.y += height + vSpace;
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.FarClipPlane));
rect.y += height + vSpace;
EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.Dutch));
--EditorGUI.indentLevel;
}
}
object GetPropertyValue(SerializedProperty property)
{
var targetObject = property.serializedObject.targetObject;
var targetObjectClassType = targetObject.GetType();
var field = targetObjectClassType.GetField(property.propertyPath);
if (field != null)
return field.GetValue(targetObject);
return null;
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
float height = EditorGUIUtility.singleLineHeight + vSpace;
if (mExpanded)
height *= 5;
return height;
}
}
}