Skip to content

Instantly share code, notes, and snippets.

@t-macnaga
Created October 25, 2020 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t-macnaga/387080ad0f157903efd741b93c35acda to your computer and use it in GitHub Desktop.
Save t-macnaga/387080ad0f157903efd741b93c35acda to your computer and use it in GitHub Desktop.
ProjectWindowのフォルダを全部閉じるエディタ拡張
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class ProjectBrowserHelperWindow : EditorWindow
{
[MenuItem("Window/ProjectBrowserHelper")]
static void Init()
{
GetWindow<ProjectBrowserHelperWindow>();
}
void OnEnable()
{
var collapseAllButton = new Button(() => OnClickCollapseAll());
collapseAllButton.text = "Collapse All";
rootVisualElement.Add(collapseAllButton);
}
void OnClickCollapseAll()
{
Selection.activeObject = null;
var window =
Resources.FindObjectsOfTypeAll<EditorWindow>().FirstOrDefault(x => x.GetType().Name == "ProjectBrowser");
if (window == null) { return; }
new InternalProjectBrowser(window).ClearExpandedIDs();
window.Repaint();
}
/// <summary>
/// UnityEditor.ProjectBrowserのリフレクション
/// </summary>
class InternalProjectBrowser
{
SerializedObject so;
SerializedProperty AssetTreeExpandedIDsProperty => so.FindProperty("m_AssetTreeState.m_ExpandedIDs");
SerializedProperty FolderTreeExpandedIDsProperty => so.FindProperty("m_FolderTreeState.m_ExpandedIDs");
public InternalProjectBrowser(EditorWindow ProjectWindow)
{
so = new SerializedObject(ProjectWindow);
}
public void ClearExpandedIDs()
{
so.Update();
AssetTreeExpandedIDsProperty.ClearArray();
FolderTreeExpandedIDsProperty.ClearArray();
AssetTreeExpandedIDsProperty.arraySize = 0;
FolderTreeExpandedIDsProperty.arraySize = 0;
so.ApplyModifiedProperties();
Reload();
}
void Reload()
{
var methodInfo = so.targetObject.GetType().GetMethod("ResetViews", BindingFlags.Instance | BindingFlags.NonPublic);
methodInfo.Invoke(so.targetObject, new object[0]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment