可以创建一个对话框,然后统一修改某些组件的值
public class Change :ScriptableWizard
{
public int 字段 = 100;
/// <summary>
/// ///创建对话框
/// </summary>
[MenuItem("龙之介工具箱/对话框", false, 100)]//按ctrl+E
static void ToFly10()
{
ScriptableWizard.DisplayWizard<LongZhiJie.Change>("对话框名", "按钮名");
}
/// <summary>
/// 当点击创建按钮时调用
/// </summary>
private void OnWizardCreate()
{
//获取选中的预制体
GameObject[] gameObjects = Selection.gameObjects;
foreach (GameObject gameObject in gameObjects)
{
LongZhiJie.qf qfs = gameObject.GetComponent<qf>();
Undo.RecordObject(qfs, "qf");//存储操作,这样就能支持撤回
qfs.x = 字段;//统一改值
}
}
}
几个常用的回调函数
OnWizardCreate() /OnWizardUpdate() /OnWizardOtherButton()
/// <summary>
/// 当create按钮被点击时调用
/// </summary>
private void OnWizardCreate()
{
}
/// <summary>
/// 当前字段值修改时调用
/// </summary>
private void OnWizardUpdate()
{
}
/// <summary>
/// 当选择的物体发生改变
/// </summary>
private void OnSelectionChange()
{
}
/// <summary>
/// 另一个按钮被点击时
/// </summary>
private void OnWizardOtherButton()
{
}
本地存储变量:
EditorPrefs.GetInt/EditorPrefs.SetInt
public int qf = 100;
private void OnEnable()
{
qf=EditorPrefs.GetInt("qf", qf);
}
private void OnWizardUpdate()
{
EditorPrefs.SetInt("qf", qf);
}
特殊提示:helpString/errorString
进度条
{
EditorUtility.DisplayProgressBar(“进度”, “0/” + gameObjects.Length + “完成修改值”, 0);
EditorUtility.DisplayProgressBar(“进度”,i +"/" + gameObjects.Length + “完成修改值”, (float)i/gameObjects.Length);
EditorUtility.ClearProgressBar();
}
弹出提示文本 : ShowNotification(new GUIContent(“当前选择了”+Selection.gameObjects.Length + “个游戏物体”));
private void OnWizardUpdate()
{
if(qf<=0)
helpString = "qf最好大于0";///会显示帮助信息
else
{
errorString = "";///会显示错误信息
}
}
private void OnWizardCreate()
{
GameObject[] gameObjects = Selection.gameObjects;
EditorUtility.DisplayProgressBar("进度", "0/" + gameObjects.Length + "完成修改值", 0);
for(int i=0; i< gameObjects.Length;i++)
{
LongZhiJie.qf qfs = gameObjects[i].GetComponent<qf>();
qfs.x = qf;
EditorUtility.DisplayProgressBar("进度",i +"/" + gameObjects.Length + "完成修改值", (float)i/gameObjects.Length);
}
EditorUtility.ClearProgressBar();
}
private void OnWizardOtherButton()
{
ShowNotification(new GUIContent("当前选择了"+Selection.gameObjects.Length + "个游戏物体"));
}
撤销操作 :
{
Undo.RegisterCreatedObjectUndo(go, “create”);//可以生成物体之后的撤销
Undo.RecordObject(qfs, “qf”);//存储操作,这样就能支持撤回
}
private void OnWizardCreate()
{
Debug.Log("OnWizardCreate");
GameObject[] gameObjects = Selection.gameObjects;
EditorUtility.DisplayProgressBar("进度", "0/" + gameObjects.Length + "完成修改值", 0);
for(int i=0; i< gameObjects.Length;i++)
{
LongZhiJie.qf qfs = gameObjects[i].GetComponent<qf>();
Undo.RecordObject(qfs, "qf");//存储操作,这样就能支持撤回
qfs.x = qf;
EditorUtility.DisplayProgressBar("进度",i +"/" + gameObjects.Length + "完成修改值", (float)i/gameObjects.Length);
}
EditorUtility.ClearProgressBar();
}
///创建自定义窗口
public class MyWindow : EditorWindow
{
[MenuItem("Window/mywindow", false, 100)]
static void ShowMyWindow()
{
MyWindow myWindow = EditorWindow.GetWindow<MyWindow>();
myWindow.Show();
}
private string name="";
private void OnGUI()
{
GUILayout.Label("这是我的窗口");
name=GUILayout.TextField(name);
if (GUILayout.Button("创建"))
{
GameObject go = new GameObject(name);
Undo.RegisterCreatedObjectUndo(go, "create");//可以撤销
}
}
}