Unity编辑器---创建对话框

Unity编辑器(三)—ScriptableWizard

这一篇主要讲创建对话框和保存记录操作并撤销更改和提示信息


1、创建对话框
首先新建一个脚本代码如下

using UnityEngine;
using UnityEditor;

public class MyWizard : ScriptableWizard {

    [MenuItem("MyTools/CreateWizard")]
    static void CreateWizard()
    {
        ScriptableWizard.DisplayWizard("我的对话框");
    }

    public float ChangeRange = 1f;
}

看一下效果

Unity编辑器---创建对话框_第1张图片

在来改变一下Create按钮名字
把”ScriptableWizard.DisplayWizard(“我的对话框”);“这段代码改成“ScriptableWizard.DisplayWizard(“我的对话框”,”确定”);”就行了,来看一下效果。

Unity编辑器---创建对话框_第2张图片


2、给自己的对话框写一点小功能
在这里我就演示一下利用自己制作的对话框来改变脚本的某一个变量的数值
添加下面这一段代码

    //OnWizardCreate不要写错了哦!不然无效哦
    private void OnWizardCreate()
    {
        GameObject[] Prefabs = Selection.gameObjects;
        foreach (GameObject go in Prefabs)
        {
        //MyGameObject 脚本是我以前一篇博客写的脚本,想看的话在后面会给个超链接
            MyGameObject Range = go.GetComponent();
            Range.m_Range += ChangeRange;
        }
    }

MyGameObject脚本。 —— [ 传送们]

来看一下效果图


3、添加保存记录方便撤销
这也是很简单的,只要一行代码就搞定了。
在改变数值前面加一行代码,如下

            MyGameObject Range = go.GetComponent();
            Undo.RecordObject(Range, "Chang Range");        //保存记录
            Range.m_Range += ChangeRange;

这回改变数值后可以按Ctrl+Z撤销回来

4、提示信息
提示信息也比较简单主要用到OnWizardUpdate和OnSelectionChange
这里是官方的文档介绍—— [ 传送们]

    //刚打开的时候和改变数值的时候调用
    private void OnWizardUpdate()
    {
        helpString = "";
        errorString = "";
        string Name = "";
        if (Selection.gameObjects.Length > 0)
        {
            GameObject[] Prefabs = Selection.gameObjects;

            foreach (GameObject go in Prefabs)
            {
                Name += go.name + "、";   
            }
            helpString = "当前选择了" + Name + "物体";
        }
        else
        {
            errorString = "请选择物体";
        }
    }

    //选择的物体改变的时候调用
    private void OnSelectionChange()
    {
        OnWizardUpdate();
    }

来看一下效果图
Unity编辑器---创建对话框_第3张图片

Unity编辑器---创建对话框_第4张图片

好了,下面我在把完整代码放出来

using UnityEngine;
using UnityEditor;

public class MyWizard : ScriptableWizard {



    [MenuItem("MyTools/CreateWizard")]
    static void CreateWizard()
    {
        ScriptableWizard.DisplayWizard("我的对话框","确定");

    }

    public float ChangeRange = 1f;


    private void OnWizardCreate()
    {
        GameObject[] Prefabs = Selection.gameObjects;
        foreach (GameObject go in Prefabs)
        {
            MyGameObject Range = go.GetComponent();
            Undo.RecordObject(Range, "Chang Range");        //保存记录
            Range.m_Range += ChangeRange;
        }

    }

    //刚打开的时候和改变数值的时候调用
    private void OnWizardUpdate()
    {
        helpString = "";
        errorString = "";
        string Name = "";
        if (Selection.gameObjects.Length > 0)
        {
            GameObject[] Prefabs = Selection.gameObjects;

            foreach (GameObject go in Prefabs)
            {
                Name += go.name + "、";   
            }
            helpString = "当前选择了" + Name + "物体";
        }
        else
        {
            errorString = "请选择物体";
        }
    }

    //选择的物体改变的时候调用
    private void OnSelectionChange()
    {
        OnWizardUpdate();
    }
}

另外说一句有空去看看官方文档,那里的介绍是最全、最新的。

你可能感兴趣的:(unity编辑器)