通常绘制EditorWindow需要手动一个个手动绘制控件和布局,但是联想到Inspector可以根据SerializedObject对象自动绘制和布局,那么如果我们可以根据SerializedObject对象来控制EditorWindow的显示,然后在此之上再进行一些自定义工作,岂不是会方便快捷很多。
本文将会介绍,如何使用ScriptableObject对象的Inspector绘制,来填充EditorWindow的界面显示。关于Inspector绘制介绍见这篇文章:自定义属性面板Inspector详解。
ScriptableObject对象的Inpsector绘制
ScriptableObject对象可以运行时存储临时数据,也可以生成.asse文件持久化数据,如果ScriptableObject持久化对象对应一个EditorWindow窗口,刚好可以当做窗口配置数据源来使用。当然,ScriptableObject的asset文件本身拥有Inpsector编辑显示能力,可以单独用来保存数据使用。比如,建立如下一个ScriptableObject子类:
using UnityEngine;
using System.Collections;
// 生成入口到Unity菜单Assets->Create下
[CreateAssetMenu(menuName = "Create ShowObject")]
public class ShowObject : ScriptableObject
{
public Vector3 position;
[Space(20)] // 注意,ShowObject需要单独一个文件,并且文件名与类名一致,[]属性才能有效。
public string label;
[Range(0, 10)] // 注意,ShowObject需要单独一个文件,并且文件名与类名一致,[]属性才能有效。
public int intData;
public bool isCheck;
public Options options;
public Shader defaultShader;
public enum Options
{
Opt1