一:ScriptableWizard类
ScriptableWizard类继承自EditorWindow类,所以在继承自ScriptableWizard的类中也可以自定义窗口中的内容,只不过ScriptableWizard为简单的窗口需求提供了便捷
二:代码实现
——创建窗口
using UnityEditor;
public class Test: ScriptableWizard
{
public float value;
[MenuItem("Tools/Create Wizard")]
private static void CreateWizard()
{
DisplayWizard<Test>("统一修改", "修改并退出", "修改不退出");
}
}
——定义属性
using UnityEditor;
public class Test: ScriptableWizard
{
public float targetValue;
[MenuItem("Tools/Create Wizard")]
private static void CreateWizard()
{
DisplayWizard<Test>("统一修改", "修改并退出", "修改不退出");
}
}
——创建按钮与其他按钮的监听
创建按钮对应DisplayWizard的第一个参数,其他按钮对应DisplayWizard的第二个参数
using UnityEditor;
using UnityEngine;
public class Test: ScriptableWizard
{
public float targetValue;
[MenuItem("Tools/Create Wizard")]
private static void CreateWizard()
{
DisplayWizard<Test>("统一修改", "修改并退出", "修改不退出");
}
/// <summary>
/// 按下创建按钮时
/// </summary>
private void OnWizardCreate()
{
Debug.Log("点击了修改并退出按钮");
}
/// <summary>
/// 按下其他按钮时
/// </summary>
private void OnWizardOtherButton()
{
Debug.Log("点击了修改不退出按钮");
}
}
——ScriptableWizard类中的回调函数
OnWizardUpdate触发条件:窗口被创建出来和窗口中的数据更新时会调用(不止调用一次)
OnSelectionChange触发条件:当选择的物体改变时——EditorWindow类中的回调
/// <summary>
/// 当窗口中的数据更新时
/// </summary>
private void OnWizardUpdate()
{
Debug.Log("当窗口中的数据更新时");
}
/// <summary>
/// 当选择的物体改变时
/// </summary>
private void OnSelectionChange()
{
Debug.Log("当选择的物体改变时");
}
——提示信息
private void OnSelectionChange()
{
errorString = "";
helpString = "";
if (Selection.gameObjects.Length <= 0)
{
errorString = "没有选择预制体";
}
else
{
helpString = "当前选择了" + Selection.gameObjects.Length + "个预制体";
}
}