孙广东 2016.8.31
这个Unity在定制的时候就遇到问题, 最好(不是必须的, 可以自己实现啊)反射系统的,
下面有些代码是之前 的文章中介绍过的。 比如 scene 场景文件的 Inspector 面板显示。 文件夹的 Inspector面板显示等!!!
正常的逻辑做法;
[CustomEditor(typeof(TextureImporter))]
public class CustomTextureAssetInspector : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector(); // 首先我希望显示默认的 系统的内容(但是不是我想要的!)
string path = AssetDatabase.GetAssetPath(target);
// 1
GUI.enabled = true;
if (path.EndsWith(".png") || path.EndsWith(".jpg"))
{
if (GUILayout.Button("Setup2UI"))
{
}
if (GUILayout.Button("Setup2SpineTexture"))
{
}
}
Debug.Log("=============显示 TextureAssetInspector ======");
}
}
结果如下图所示, 这种肯定不是我想要的。
http://blog.csdn.net/u010019717
所以只能使用反射解决:
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using System.Reflection;
using System;
/// <summary>
/// 描述:注: 音频、贴图、材质、预制体、模型、脚本、特殊不识别的资源等都不是 DefaultAsset
/// author: 孙广东
/// </summary>
[CustomEditor(typeof(UnityEditor.DefaultAsset))]
public class CustomDefaultAssetInspector : Editor
{
#region ===字段===
private static string prePath = string.Empty;
#endregion
#region ===Unity事件=== 快捷键: Ctrl + Shift + M /Ctrl + Shift + Q 实现
// 1、如果是场景就显示 场景的所有引用。
// 2、如果是文件夹,就显示 文件夹下的所有文件和子目录
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
string path = AssetDatabase.GetAssetPath(target);
// 1
GUI.enabled = true;
FileInfo fil = new FileInfo(path);
if (fil.Attributes == FileAttributes.Directory)//判断类型是选择的是文件夹还是文件
{
GUILayout.Label("文件夹下的所有内容:");
var filePaths = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
int i = 1;
f