首页 >Unity3D频道 >【你好Unity3D】 > #你好Unity3D#Inspector视图使用脚本展开组件
2015
12-09

#你好Unity3D#Inspector视图使用脚本展开组件

版本Unity5.3.0

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

Snip20151209_2

可以用反射来做直接上代码~

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);
			}
		}
	}
}

如下图所示,我的组件都展开了。Snip20151209_1OK!

我又发现了一种不用反射的写法。。。

        [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 );
            }
        }

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

#你好Unity3D#Inspector视图使用脚本展开组件》有 8 条评论

  1. ershi说:

    请问松大大:tracker.activeEditors 通过脚本展开,里面的OnSceneGUI()为啥不会调用呢

  2. hawa说:

    雨松大神,问下 怎么样可以通过路径 展开 Project面板 的文件夹?

  3. yun说:

    雨松大神,请问怎么样用代码展开Project面板下的树形结构?

  4. c6u2说:

    解决了脚本太多太杂乱的问题么?

  5. 安亚晨说:

    谢谢雨松大大 解决了我的问题

留下一个回复

你的email不会被公开。 必填项已用 * 标注。