版本Unity5.3.0
Inspector视图中的所有组件,如果想展开必须用鼠标点击一下左上角的小箭头。昨天有朋友问我能不能通过脚本来动态展开或者关闭。

可以用反射来做直接上代码~
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Reflection;
using System;
public class MyEditor : Editor
{
[MenuItem("Test/Test")]
static void Start ()
{
var type = typeof(EditorWindow).Assembly.GetType("UnityEditor.InspectorWindow");
var window = EditorWindow.GetWindow(type);
FieldInfo info = type.GetField("m_Tracker", BindingFlags.NonPublic | BindingFlags.Instance);
ActiveEditorTracker tracker = info.GetValue(window) as ActiveEditorTracker;
for(int i = 0; i< tracker.activeEditors.Length; i++)
{
//可以通过名子单独判断组件展开或不展开
if(tracker.activeEditors[i].target.GetType().Name != "NewBehaviourScript")
{
//这里1就是展开,0就是合起来
tracker.SetVisible(i,1);
}
}
}
}
我又发现了一种不用反射的写法。。。
[MenuItem( "CONTEXT/Component/Fold All" )]
public static void FoldAll( MenuCommand command )
{
ActiveEditorTracker editorTracker = ActiveEditorTracker.sharedTracker;
Editor[] editors = editorTracker.activeEditors;
bool areAllFolded = true;
for( int i = 1; i < editors.Length; i++ )
{
if( editorTracker.GetVisible( i ) != 0 )
{
areAllFolded = false;
break;
}
}
for( int i = 1; i < editors.Length; i++ )
{
editorTracker.SetVisible( i, areAllFolded ? 1 : 0 );
}
}
- 本文固定链接: https://www.xuanyusong.com/archives/3784
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!


请问松大大:tracker.activeEditors 通过脚本展开,里面的OnSceneGUI()为啥不会调用呢
要在自己展开的地方主动调用它
雨松大神,问下 怎么样可以通过路径 展开 Project面板 的文件夹?
雨松大神,请问怎么样用代码展开Project面板下的树形结构?
可以试试用 UnityEditor.Selection.activeObject 自动选择一个文件, 这样会自动展开。
解决了脚本太多太杂乱的问题么?
不是, 我觉得是做编辑工具的时候 可能会用到。
谢谢雨松大大 解决了我的问题