您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
61 行
2.5 KiB
61 行
2.5 KiB
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;
|
|
}
|
|
}
|
|
}
|