ソースコード
using System;
using System.Reflection;
using UnityEditor;
namespace Kogane.Internal
{
public static class PropertyEditorInternal
{
private const BindingFlags BINDING_ATTRS = BindingFlags.Instance | BindingFlags.NonPublic;
private static readonly Type TYPE = typeof( Editor ).Assembly.GetType( "UnityEditor.PropertyEditor" );
public static void ExpandAllComponents( EditorWindow propertyEditor )
{
var method = TYPE.GetMethod( nameof( ExpandAllComponents ), BINDING_ATTRS );
method.Invoke( propertyEditor, Array.Empty<object>() );
propertyEditor.Repaint();
}
public static bool IsAnyComponentCollapsed( EditorWindow propertyEditor )
{
var method = TYPE.GetMethod( nameof( IsAnyComponentCollapsed ), BINDING_ATTRS );
return ( bool )method.Invoke( propertyEditor, Array.Empty<object>() );
}
public static void CollapseAllComponents( EditorWindow propertyEditor )
{
var method = TYPE.GetMethod( nameof( CollapseAllComponents ), BINDING_ATTRS );
method.Invoke( propertyEditor, Array.Empty<object>() );
propertyEditor.Repaint();
}
public static bool IsAnyComponentExpanded( EditorWindow propertyEditor )
{
var method = TYPE.GetMethod( nameof( IsAnyComponentExpanded ), BINDING_ATTRS );
return ( bool )method.Invoke( propertyEditor, Array.Empty<object>() );
}
}
}
使用例
using System;
using System.Linq;
using Kogane.Internal;
using UnityEditor;
using UnityEngine;
public static class Example
{
private static readonly Type TYPE = typeof( Editor ).Assembly.GetType( "UnityEditor.PropertyEditor" );
[MenuItem( "Tools/Expand All Components", true )]
private static bool IsAnyComponentCollapsed()
{
return PropertyEditorInternal.IsAnyComponentCollapsed( GetPropertyEditor() );
}
[MenuItem( "Tools/Expand All Components" )]
private static void ExpandAllComponents()
{
PropertyEditorInternal.ExpandAllComponents( GetPropertyEditor() );
}
[MenuItem( "Tools/Collapse All Components", true )]
private static bool IsAnyComponentExpanded()
{
return PropertyEditorInternal.IsAnyComponentExpanded( GetPropertyEditor() );
}
[MenuItem( "Tools/Collapse All Components" )]
private static void CollapseAllComponents()
{
PropertyEditorInternal.CollapseAllComponents( GetPropertyEditor() );
}
private static EditorWindow GetPropertyEditor()
{
return Resources
.FindObjectsOfTypeAll( TYPE )
.FirstOrDefault() as EditorWindow
;
}
}