去掉obi,使用自写绳索
This commit is contained in:
@@ -1,63 +0,0 @@
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
using System.Reflection;
|
||||
|
||||
namespace Obi{
|
||||
|
||||
[System.AttributeUsage(System.AttributeTargets.Field)]
|
||||
public class VisibleIf : MultiPropertyAttribute
|
||||
{
|
||||
public string MethodName { get; private set; }
|
||||
public bool Negate {get; private set;}
|
||||
|
||||
private MethodInfo eventMethodInfo = null;
|
||||
private FieldInfo fieldInfo = null;
|
||||
private PropertyInfo propertyInfo = null;
|
||||
|
||||
public VisibleIf(string methodName, bool negate = false)
|
||||
{
|
||||
this.MethodName = methodName;
|
||||
this.Negate = negate;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
internal override bool IsVisible(SerializedProperty property)
|
||||
{
|
||||
return Visibility(property) == !Negate;
|
||||
}
|
||||
|
||||
private bool Visibility(SerializedProperty property)
|
||||
{
|
||||
System.Type eventOwnerType = property.serializedObject.targetObject.GetType();
|
||||
string eventName = MethodName;
|
||||
|
||||
// Try finding a method with the name provided:
|
||||
if (eventMethodInfo == null)
|
||||
eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
|
||||
// If we could not find a method with that name, look for a field:
|
||||
if (eventMethodInfo == null && fieldInfo == null)
|
||||
fieldInfo = eventOwnerType.GetField(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
|
||||
// or maybe a property
|
||||
if (eventMethodInfo == null && fieldInfo == null && propertyInfo == null)
|
||||
propertyInfo = eventOwnerType.GetProperty(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
|
||||
if (eventMethodInfo != null)
|
||||
return (bool)eventMethodInfo.Invoke(property.serializedObject.targetObject, null);
|
||||
else if (fieldInfo != null)
|
||||
return (bool)fieldInfo.GetValue(property.serializedObject.targetObject);
|
||||
else if (propertyInfo != null)
|
||||
return (bool)propertyInfo.GetValue(property.serializedObject.targetObject);
|
||||
else
|
||||
Debug.LogWarning(string.Format("VisibleIf: Unable to find method, field or property {0} in {1}", eventName, eventOwnerType));
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user