创建对话框进行操作
-
代码如下,通过继承ScriptableWizard类来创建一个弹出框。
-
其中ScriptableWizard.DisplayWizard(“统一修改敌人”,“Change And Close”,“Change”);用来实例化该类的弹出框。参数1为对话框标题,参数2为按钮名,默认会有一个按钮,默认名为create,点击会关闭该弹出框并执行OnWizardCreate()方法。参数3为其他按钮名,会创建一个按钮,点击不会关闭对话框,并且会调用OnWizardOtherButton();方法
-
当窗口被创建出来的时候系统会自动调用类中的OnEnable()方法。
-
当前字段值修改的时候会调用OnWizardUpdate()。
-
当选择的物体变化时会调用OnSelectionChange()。
-
EditorPrefs.SetInt(changeStartHealthValueKey, changeStartHealthValue);用于记录值的变化。
-
EditorUtility.DisplayProgressBar(“进度”, “0/” + enemyPrefabs.Length + " 完成修改值", 0);效果为显示一个进度条。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class EnemyChange : ScriptableWizard {
[MenuItem("Tools/CreateWizard")]
static void CreateWizard()
{
ScriptableWizard.DisplayWizard<EnemyChange>("统一修改敌人","Change And Close","Change");
}
public int changeStartHealthValue = 10;
public int changeSinkSpeedValue = 1;
const string changeStartHealthValueKey = "EnemyChange.changeStartHealthValue";
const string changeSinkSpeedValueKey = "EnemyChange.changeSinkSpeedValue";
//当窗口被创建出来的时候调用的
void OnEnable()
{
changeStartHealthValue = EditorPrefs.GetInt(changeStartHealthValueKey, changeStartHealthValue);
changeSinkSpeedValue = EditorPrefs.GetInt(changeSinkSpeedValueKey, changeSinkSpeedValue);
}
//检测create按钮的点击
void OnWizardCreate()
{
GameObject[] enemyPrefabs = Selection.gameObjects;
EditorUtility.DisplayProgressBar("进度", "0/" + enemyPrefabs.Length + " 完成修改值", 0);
int count = 0;
foreach (GameObject go in enemyPrefabs)
{
CompleteProject.EnemyHealth hp = go.GetComponent<CompleteProject.EnemyHealth>();
Undo.RecordObject(hp, "change health and speed");
hp.startingHealth += changeStartHealthValue;
hp.sinkSpeed += changeSinkSpeedValue;
count++;
EditorUtility.DisplayProgressBar("进度", count+"/" + enemyPrefabs.Length + " 完成修改值", (float)count/enemyPrefabs.Length);
}
EditorUtility.ClearProgressBar();
ShowNotification(new GUIContent(Selection.gameObjects.Length + "个游戏物体的值被修改了"));
}
void OnWizardOtherButton()
{
OnWizardCreate();
}
//当前字段值修改的时候会被调用
void OnWizardUpdate()
{
errorString = null;
helpString = null;
if (Selection.gameObjects.Length > 0)
{
helpString = "您当前选择了" + Selection.gameObjects.Length + "个敌人";
}
else
{
errorString = "请选择至少一个敌人";
}
EditorPrefs.SetInt(changeStartHealthValueKey, changeStartHealthValue);
EditorPrefs.SetInt(changeSinkSpeedValueKey, changeSinkSpeedValue);
}
void OnSelectionChange()
{
OnWizardUpdate();
}
}