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

79 行
2.5 KiB

using UnityEditor;
using System;
using System.Collections.Generic;
using Cinemachine.Utility;
using System.Linq.Expressions;
namespace Cinemachine.Editor
{
public class BaseEditor<T> : UnityEditor.Editor where T : class
{
protected T Target { get { return target as T; } }
protected SerializedProperty FindAndExcludeProperty<TValue>(Expression<Func<T, TValue>> expr)
{
SerializedProperty p = FindProperty(expr);
ExcludeProperty(p.name);
return p;
}
protected SerializedProperty FindProperty<TValue>(Expression<Func<T, TValue>> expr)
{
return serializedObject.FindProperty(FieldPath(expr));
}
protected string FieldPath<TValue>(Expression<Func<T, TValue>> expr)
{
return ReflectionHelpers.GetFieldPath(expr);
}
protected virtual List<string> GetExcludedPropertiesInInspector()
{
var excluded = new List<string>() { "m_Script" };
if (mAdditionalExcluded != null)
excluded.AddRange(mAdditionalExcluded);
return excluded;
}
List<string> mAdditionalExcluded;
protected void ExcludeProperty(string propertyName)
{
if (mAdditionalExcluded == null)
mAdditionalExcluded = new List<string>();
mAdditionalExcluded.Add(propertyName);
}
public override void OnInspectorGUI()
{
BeginInspector();
DrawRemainingPropertiesInInspector();
}
protected virtual void BeginInspector()
{
mAdditionalExcluded = null;
serializedObject.Update();
}
protected virtual void DrawPropertyInInspector(SerializedProperty p)
{
List<string> excluded = GetExcludedPropertiesInInspector();
if (!excluded.Contains(p.name))
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(p);
if (EditorGUI.EndChangeCheck())
serializedObject.ApplyModifiedProperties();
ExcludeProperty(p.name);
}
}
protected void DrawRemainingPropertiesInInspector()
{
EditorGUI.BeginChangeCheck();
DrawPropertiesExcluding(serializedObject, GetExcludedPropertiesInInspector().ToArray());
if (EditorGUI.EndChangeCheck())
serializedObject.ApplyModifiedProperties();
}
}
}