一些特效
This commit is contained in:
57
Packages/XuanXuanRenderUtility/Runtime/ButtonAttributes.cs
Normal file
57
Packages/XuanXuanRenderUtility/Runtime/ButtonAttributes.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
public class InspectorButtonAttribute:PropertyAttribute
|
||||
{
|
||||
public string Label;
|
||||
public string MethodName;
|
||||
|
||||
public InspectorButtonAttribute(string label,string methodName)
|
||||
{
|
||||
this.Label = label;
|
||||
this.MethodName = methodName;
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomPropertyDrawer(typeof(InspectorButtonAttribute))]
|
||||
public class InspectorButtonPropertyDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
|
||||
InspectorButtonAttribute buttonAttribute = (InspectorButtonAttribute)attribute;
|
||||
|
||||
|
||||
// 绘制按钮
|
||||
if (GUI.Button(position, buttonAttribute.Label))
|
||||
{
|
||||
// 获取包含该方法的对象
|
||||
var targetObject = property.serializedObject.targetObject;
|
||||
|
||||
// 获取方法信息
|
||||
var methodInfo = targetObject.GetType().GetMethod(buttonAttribute.MethodName,BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
|
||||
if (methodInfo != null)
|
||||
{
|
||||
// 调用方法
|
||||
methodInfo.Invoke(targetObject, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"Method '{buttonAttribute.MethodName}' not found in {targetObject.name}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
return EditorGUIUtility.singleLineHeight; // 返回按钮的高度
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user