编辑器显示自定义数据结构

  GUI/GUILayout/EditorGUILayout这几个类中没有提供自定义数据结构的显示,难道就不能像Inspector那样友好么,不然就只能使用基础元素来组合实现了。

  不赘述,代码如下:

public class TestClass
{
    public int value;
    public string name = "";
}

public class TestEditor : EditorWindow
{
    public static TestEditor window = null;

    [MenuItem("Test/MyEditor &t")]
    public static void ShowWindow()
    {
        window = EditorWindow.GetWindow(typeof(TestEditor), false, "TestEditor") as TestEditor;
    }

    private List<TestClass> lst = new List<TestClass>();
    private bool showFoldout = true;
    private Vector2 scrollPosition = Vector2.zero;

    int count
    {
        get { return lst.Count; }
        set
        {
            if(value < lst.Count)
            {
                lst.RemoveRange(value, lst.Count - value);
            }
            else if(value > lst.Count)
            {
                for(int i = 0; i < value; ++i)
                {
                    lst.Add(new TestClass());
                }
            }
        }
    }

    void OnGUI()
    {
        GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height), "", "box");
        GUILayout.BeginVertical("box");
        scrollPosition = GUILayout.BeginScrollView(scrollPosition, "box");      // 创建自适应滚动条

        // 创建折叠标签
        showFoldout = EditorGUILayout.Foldout(showFoldout, "Array");
        if (showFoldout)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("count", GUILayout.Width(50));
            count = System.Convert.ToInt32(GUILayout.TextField(count.ToString()));
            GUILayout.EndHorizontal();

            // 逐行显示数据
            for (int i = 0; i < count; ++i)
            {
                GUILayout.BeginHorizontal();

                GUILayout.Label("name", GUILayout.Width(50));
                lst[i].name = GUILayout.TextField(lst[i].name);

                GUILayout.Label("value", GUILayout.Width(50));
                lst[i].value = System.Convert.ToInt32(GUILayout.TextField(lst[i].value.ToString()));

                GUILayout.EndHorizontal();
            }
        }

        GUILayout.EndVertical();
        GUILayout.EndScrollView();
        GUILayout.EndArea();
    }

}

  上述代码在自定义编辑器中显示了自定义结构TestClass的列表,效果如下所示:

  有个小细节值得一提,TestClass.name一定要初始化为"",不然现实会报错。

时间: 2024-10-03 13:27:00

编辑器显示自定义数据结构的相关文章

如何在XAF中显示自定义窗体和控件

https://www.devexpress.com/Support/Center/Example/Details/E911 如何在XAF中显示自定义窗体和控件,布布扣,bubuko.com

ASP.NET Core中显示自定义错误页面

在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白. 如果在 Startup.cs 的 Configure() 中加上 app.UseStatusCodePages(); ,500错误时依然是一片空白(不知为何对500错误不起作用),404错误时有所改观,页面会显示下面的文字: Status Code: 404; Not Found 如果我们想不管500还是404错误都显示友好的自定义错误页面,该如何实现呢?请看下面的分解.

UIButton的selected设为TRUE时在按下时显示自定义的背景图

在UIButton的selected设为TRUE后,需要在按钮高亮时,显示自定义的背景图. 经研究hightLighted和selected这两个状态是可以重叠的,就是button可以同时处于selectec和highlighted两个状态下. 从UIControlState的定义也可以看出: typedef NS_OPTIONS(NSUInteger, UIControlState) { UIControlStateNormal       = 0, UIControlStateHighlig

双击CAD对象(具有扩展数据),显示自定义对话框实现方法

转自:Cad人生 链接:http://www.cnblogs.com/cadlife/p/3463337.html 题目:双击CAD对象,显示自定义对话框实现方法 内容粘贴如下: 主要是绑定两个事件:一个是 Application.DocumentManager.DocumentLockModeChanged ----- 该事件为文档锁定事件,一直在被监测中 一个是 Application.BeginDoubleClick ----- 该事件为应用程序的双击事件 1 class TlsAppli

iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图

iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="shortcut icon" href="static/my/img/favicon.ico"> <!-- Safari浏览器[添加到主屏幕] --> <link rel="apple-touch-icon" href="stat

.NetCore自动转换枚举类显示自定义中文名称

通常我们在定义枚举类时,可能使用数字或者英文,但在界面显示的时候又希望显示中文,我总结了以下两种方法 (1)显示自定义的枚举名称: public enum WorkFlowProcessState { [Display(Name = "未启动")] None = 0, [Display(Name = "等待中")] Waiting, [Display(Name = "处理中")] Processing, [Display(Name = "

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html 我们先来看看效果图: FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码: procedure TForm1.Button3Click(Sender: TObject); var pe: TPie; //扇形作进度 rc: TRoundRec

Android 如何在IDEA Eclipse 的UI Editor 中显示自定义的字体 Preview

将要显示的字体复制到.android-sdk/platforms/android-[Version]/data/fonts 文件夹下面 如:FontAwesome-Regular.ttf 在android-sdk/platforms/android-[Version]/data/fonts 下打开 fallback_fonts.xml 在最后加上: <family> <fileset> <file>[复制到文件加下的文件名,如:FontAwesome-Regular.t

【起航计划 026】2015 起航计划 Android APIDemo的魔鬼步伐 25 App-&gt;Notification-&gt;Status Bar 状态栏显示自定义的通知布局,省却声音、震动

这个例子的Icons Only 和 Icons and marquee 没有什么特别好说明的. 而Use Remote views in balloon 介绍了可以自定义在Extended Status bar显示Notification的Layout,Extended Status Bar缺省显示Notification 是一个图标后接文字,对应大多数情况是够用了.但如果有需要也可以使用自定义的Layout在Extented Status bar显示Notification,方法是通过Remo