Unity3D编辑器-编辑器向导ScriptableWizard

        终于熬到了公司项目上线,不知不觉从事u3d开发已经有2年的时间,倍感迷茫,想经过写博客来沉淀一下本身。如今才知道,会作和会说是两件大相径庭的事情。对于我来讲,写好技术文档比作难多了。app

        接下来几篇文章,我会分享一下unity中如何建立编辑器,我认为你们在作项目的时候,首先要给策划或者美术开发足够的编辑器,能极大的节省程序时间,提升开发效率。编辑器

要建立简单的界面编辑器,咱们须要继承ScriptableWizard类,类中的字段和方法能帮助你快速搭建编辑器窗口:3d

createButtonName  : 肯定按钮的名字(你能够设置为apply,ok等更为贴切的名字),code

errorString : 错误提示orm

helpString : 帮助提示blog

isValid  : 底下按钮是否可点继承


OnWizardCreate() : 点击肯定按钮调用此事件事件

OnWizardUpdate() : 当编辑器向导更新时调用ip


下面以计算时间戳为例,给你们作一个演示:
开发

public class TimestampEditor : ScriptableWizard
{
    public string time = "";
    
    void OnWizardUpdate()
    {
        if (time.Split('-').Length == 6)
        {
            isValid = true;
            errorString = "";
        }
        else
        {
            isValid = false;
            errorString = "日期格式有误";
            helpString = "格式:2015-1-1-8-0-0";
        }

    }

    void OnWizardCreate()
    {
        try
        {
            Debug.Log("时间戳 " + ColorFormat(GetTimestamp(time)));
        }
        catch (Exception)
        {
            Debug.LogError("日期格式有误");
        }

    }

    void OnWizardOtherButton()
    {
        Debug.Log("OnWizardOtherButton");
    }
    
    string ColorFormat(string tex)
    {
        return "<color='#FFD700'>" + tex + "</color>";
    }


    private string GetTimestamp(string t)
    {
        string[] tmp = t.Split('-');
        int year = int.Parse(tmp[0]);
        int month = int.Parse(tmp[1]);
        int day = int.Parse(tmp[2]);
        int hour = int.Parse(tmp[3]);
        int minute = int.Parse(tmp[4]);
        int second = int.Parse(tmp[5]);
        DateTime DateNow = new DateTime(year, month, day, hour, minute, second);
        DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0);
        return (DateNow - DateStart).TotalSeconds.ToString();
    }

    [MenuItem("Custom/计算时间戳")]
    static void CreateDeSer()
    {
        ScriptableWizard.DisplayWizard<TimestampEditor>("Timestamp", "计算","取消");
    }
}