Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

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;
}
}
}