标题编辑器常用的几种添加方式
7. 给菜单栏自定义的按钮添加快捷键
例子:定义了点击S的快捷方式
[MenuItem("GameObject/Select _s",false,12)]
static void Selects()
{
Debug.Log("我是Select方法");
}
注意: 添加快捷键的时候在路径后面一定要加空格 单个定义快捷键的时候前面要加_ <>font>
这里是使用的组合快捷键
[MenuItem("GameObject/Test %q", true, 12)]
static void Tests()
{
Debug.Log("我是Test方法");
}
注意: Ctrl在这里用%表示,Shift用# ,Alt用&
8. 控制菜单栏按钮是否启用
[MenuItem("GameObject/Test %q", true, 12)]
static bool Test()
{
if (Selection.objects.Length > 0)
{
return true;
}
else
{
return false;
}
}
[MenuItem("GameObject/Test %q", false, 12)]
static void Tests()
{
Debug.Log("我是Test方法");
}
注意:两个方法必须同时写,并且,两个的菜单栏路径必需相同。
9. 关于ContextMenu和ContextMenuItem两个方法的使用
这是我写的一个测试的脚本,凑合看一下吧!!!
public class Test : MonoBehaviour
{
//参数一:按钮的名字
//参数二:方法的名字,方法必须真实存在的
[ContextMenuItem("Add Time","AddTime")]
public int Time = 0;
public Color color=Color.blue;
public GameObject go;
public string str = "Test";
void AddTime()
{
Time += 1;
}
[ContextMenu("ChangeColor")]
void ChangeColor()
{
color=Color.cyan;
}
}
这个介绍的是ContextMenuItem的使用方法
这个示意图介绍的是ContextMenu的使用。
10. 关于如何创建对话框(系统对话框)
public class DialogBox :ScriptableWizard
{
//定义一些字段,在窗口中显示
public int List = 0;
public string name = "";
[MenuItem("Test/Dialog")]
static void Dialog()
{
//创建一个对话框,
//第一个参数是对话框的名字,第二个是对话框默认按钮的名字,默认名字为Create,第三个参数是其他按钮的名字
//第二个参数中的按钮既可以实现方法,同时也会把对话框关闭,并且实现按钮的方法名是固定的(OnWizardCreate()),
//第三个参数创建的按钮只会实现里面的代码块,不会使按钮关闭,实现按钮的方法名也是固定的。(OnWizardOtherButton())
ScriptableWizard.DisplayWizard<DialogBox>("第一个对话框","ChangeNameAndClose","ChangeName");
}
/// <summary>
/// 对话框按钮实现的固定方法(第一个按钮的实现方法)
/// </summary>
void OnWizardCreate()
{
//这里使用Selection.gameObjects是因为它不仅可以修改场景中的颗粒,也可以修改预设物。
//Selection。Objects只能修改场景中的颗粒。
foreach (GameObject go in Selection.gameObjects)
{
//添加了撤销的功能
Undo.RecordObject(go,"repeal");
go.name = name+List;
List++;
}
}
/// <summary>
/// 允许在用户单击其他按钮时提供操作。固定方法(第二个按钮的实现方法)
/// </summary>
void OnWizardOtherButton()
{
OnWizardCreate();
}
注意:新创建的脚本要继承ScriptableWizard这个类,这个类是创建对话框的类
11. 在窗体上显示提示框的帮助信息
/// <summary>
/// 当窗口打开或者修改窗口中某些字段的值时会调用
/// </summary>
void OnWizardUpdate() //自带方法
{
//helpString:允许您设置向导的帮助文本
//errorString:允许您设置向导的错误提示文本
helpString = "";
errorString = "";
if (Selection.gameObjects.Length > 0)
{
helpString = "你选择了" + Selection.gameObjects.Length + "个物体";
}
else
{
errorString = "请至少选择一个物体";
}
}
//当选择物体发生更改时调用,用这个方法保证窗口中的提示信息会随着操作而刷新。
void OnSelectionChange() //自带方法
{
OnWizardUpdate();
}
还有一种提示方式,在执行操作后显示你的操作的提示信息,为了提醒你操作完成
只需在你要执行的方法后加上 ShowNotification()方法,填上你要提示的信息即可
//这个方法主要是为了提示你的操作,为了方便提醒自己
ShowNotification(new GUIContent("你修改了"+Selection.gameObjects.Length+"个物体"));
12. 保存你在窗口上输入的数据,不用每次打开窗口都要重新拖拽,输入
主要使用 EditorPrefs.SetInt/SetString()方法等进行存档 EditorPrefs.GetInt/GetString();进行读档。下面是一个简单的例子。
[MenuItem("Test/Dialog")]
static void Dialog()
{
ScriptableWizard.DisplayWizard<DialogBox>("第一个对话框","ChangeNameAndClose","ChangeName");
}
void OnEnable()
{
name = EditorPrefs.GetString("Name");
List = EditorPrefs.GetInt("List");
}
/// <summary>
/// 对话框按钮实现的固定方法
/// </summary>
void OnWizardCreate()
{
foreach (GameObject go in Selection.gameObjects)
{
//添加了撤销的功能
Undo.RecordObject(go,"repeal");
go.name = name+List;
List++;
}
//主要是为了方便记录,记录你上次输入的值
EditorPrefs.SetString("Name",name);
EditorPrefs.SetInt("List",List);
}
12. 当你要修改大批量的物体时,怎样显示进度条
只需要调用系统封装的方法即可
第一个参数是进度条的名字。 第二个参数是可以是你对于进度执行多少的一个提示信息。 第三个参数,是你要执行的总量.(例如修改颗粒的个数)
EditorUtility.DisplayProgressBar("修改进度", "修改了"+Selection.gameObjects.Length+ "/"+ List , List/Selection.gameObjects.Length);
运行之后你会发现进度条走完了之后不会消失,在这句话后面加上,这句代码就会在执行完之后自动销毁进度条。
EditorUtility.ClearProgressBar();