62 lines
2.5 KiB
C#
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;
|
||
|
}
|
||
|
}
|
||
|
}
|