public class AddTools { [MenuItem("Assets/Test1",false,10)] static void test1()//必须为静态函数 { Debug.Log("test1"); } }
[MenuItem("Assets/tab1",false,0)] static void tab() { //这个静态方法是实现上面设置的按钮的功能的 } [MenuItem("Assets/tab2", false, 11)] static void tab1() { //这个静态方法是实现上面设置的按钮的功能的 }
[MenuItem("CONTEXT/text1/InitHealthAndSpeed1")] static void InitHealthAndSpeed() { //点击InitHealthAndSpeed1按钮就会执行这个静态方法 Debug.Log("aa"); }
[MenuItem("CONTEXT/text1/InitHealthAndSpeed1")] static void InitHealthAndSpeed(MenuCommand cmd) { //点击InitHealthAndSpeed1按钮就会执行这个静态方法 text1 ta1 = cmd.context as text1;//MenuCommand获取到正在操作的text1脚本组件 ta1.a = 10;//对组件的内容进行修改 Debug.Log(ta1.a); }
GameObject go = Selection.activeGameObject;//获取被选中的一个物体对象,获取的只能是游戏对象 Transform go1 = Selection.activeTransform;//获取被选中的一个物体的Transform组件,获取的只能是游戏对象 GameObject[] go2 = Selection.gameObjects;//获取所哟被选中的游戏对象 Transform[] go4 = Selection.transforms;//获取所哟被选中的游戏对象的transform属性 object[] go3 = Selection.objects;//获取Unity中所有被选中的资源,资源可以是任何种类的 object go5 = Selection.activeObject;//只能获取Unity中所有种被选中资源的一个,资源可以是任何种类的
Undo.DestoryObjectImmediate(gameobject)//利用Undo把删除操作注册到内存中
在编辑器的脚本中删除物体使用DestoryImmediate(gameobject)这个API
[MenuItem("Assets/tab1",false,0)] static void tab() { //这个静态方法是实现上面设置的按钮的功能的 GameObject go = Selection.activeGameObject;//获取被选中的一个物体对象,获取的只能是游戏对象 Undo.DestroyObjectImmediate(go);//把删除操作注册要内存中,按ctrl +z可以取消删除 }
[MenuItem("Assets/tab2 %t", false, 11)]//给Tab2按键设置Ctrl +t为tab2按钮的快捷键 static void tab1() { }
[MenuItem("Assets/tab2 _t", false, 11)] static void tab1() { }
这两个Maneitem是配合使用的,false之前的true是判断按钮能按下的条件的,在返回true时,按钮就会被起用
[menuitem("assets/a",true,1)]
static bool delect()
{
判断是否满足条件,满足返回true,则按钮可以点击
不满足就返回false 按钮被禁用
}
[menuitem("assets/a",false,1)]
static void delect1()
{
//执行自定义按钮的功能
}
[MenuItem("Assets/tab1", true, 0)] static bool tab2() { if (Selection.activeGameObject == null)//判断是否选中物体 { return false; } else { return true;//选中物体返回true,启用tab1按钮组件 } } [MenuItem("Assets/tab1",false,0)] static void tab() { //这个静态方法是实现上面设置的按钮的功能的 GameObject go = Selection.activeGameObject;//获取被选中的一个物体对象,获取的只能是游戏对象 // GameObject.DestroyImmediate(go);//删除这个对象 Undo.DestroyObjectImmediate(go);//把删除操作注册要内存中,按ctrl +z可以取消删除 }
mainitem中的True 和false 相互配合,来实现按钮选择性实现
public class text1 : MonoBehaviour { [ContextMenuItem("addcount", "Add")]//直接在自定义脚本的属性a添加按钮,按钮执行的功能是执行add方法,按钮名是addCount public int a = 0; void Add() { a += 10; print(a); } [ContextMenu("TestButton")]//直接在自定义的脚本添加右键按钮TestButton,执行的功能是标签下面的方法 void Onbutton() { print("a"); } }
using UnityEditor; public class CreateEdior :ScriptableWizard { [MenuItem("Assets/tab3",false,2)]//创建tab3按钮 static void tab3() { ScriptableWizard.DisplayWizard<CreateEdior>("修改数据");//创建对话框,读取CreateEditor脚本的数据,文本框的名字为“修改数据” } public float speed;//CreateEditor脚本中的数据 public int index; [MenuItem("Assets/tab4", false, 3)]//创建tab4按钮 static void tab4()//创建对话框 { ScriptableWizard.DisplayWizard<stab>("修改数据"); } } public class stab:ScriptableWizard//文本框要交互的数据 { public int a = 10; public int b = 19; }
public float speed;//CreateEditor脚本中的数据 public int index; [MenuItem("Assets/tab3",false,2)]//创建tab3按钮 static void tab3() { ScriptableWizard.DisplayWizard<CreateEdior>("修改数据","CreatButton");//创建对话框,读取CreateEditor脚本的数据,文本框的名字为“修改数据” } void OnWizardCreate()//对话框的按钮被点击时,触发这个方法 { GameObject[] enemy = Selection.gameObjects;//获取所有被选中的对象 foreach (var go in enemy) { if(go.transform.tag=="enemy")//获取选中标签为enemy的物体 { text1 text2 = go.GetComponent<text1>();//获取他们的text1脚本 text2.a = index;//用对话框的index值修改获取对象的脚本值 } } }
/// <summary> /// 替换被选中的对象时就会触发这个方法 /// </summary> void OnSelectionChange() { Debug.Log(Selection.activeGameObject.name);//打印出被选中的一个游戏对象的名字 } /// <summary> /// 对话框打开时触发这个方法,对话框中字段一改动就执行该方法 /// </summary> void OnWizardUpdate() { Debug.Log(index); }
[MenuItem("Assets/tab3",false,2)]//创建tab3按钮 static void tab3() { ScriptableWizard.DisplayWizard<CreateEdior>("修改数据","CloseButton","otherButton");//创建对话框,读取CreateEditor脚本的数据,文本框的名字为“修改数据” } void OnWizardCreate()//对话框的CloseButton按钮被点击时,触发这个方法 { Debug.Log("对话框已关闭"); } void OnWizardOtherButton()//对话框的otherButton按钮被点击时,触发这个方法 { GameObject[] enemy = Selection.gameObjects;//获取所有被选中的对象 foreach (var go in enemy) { if (go.transform.tag == "enemy")//获取选中标签为enemy的物体 { text1 text2 = go.GetComponent<text1>();//获取他们的text1脚本 Undo.RecordObject(text2, "change");//把text2这个类的数据存储起来,类修改后,可以ctrl +z恢复到现在记录的类的数据 text2.a = index;//用对话框的index值修改获取对象的脚本值 } } }
void OnWizardCreate()//对话框的按钮被点击时,触发这个方法 { GameObject[] enemy = Selection.gameObjects;//获取所有被选中的对象 foreach (var go in enemy) { if(go.transform.tag=="enemy")//获取选中标签为enemy的物体 { text1 text2 = go.GetComponent<text1>();//获取他们的text1脚本 Undo.RecordObject(text2, "change");//把text2这个类的数据存储起来,类修改后,可以ctrl +z恢复到现在记录的类的数据 text2.a = index;//用对话框的index值修改获取对象的脚本值 } } }
void OnWizardOtherButton()//对话框的otherButton按钮被点击时,触发这个方法 { int a = 0; GameObject[] enemy = Selection.gameObjects;//获取所有被选中的对象 foreach (var go in enemy) { a++; if (go.transform.tag == "enemy")//获取选中标签为enemy的物体 { text1 text2 = go.GetComponent<text1>();//获取他们的text1脚本 Undo.RecordObject(text2, "change");//把text2这个类的数据存储起来,类修改后,可以ctrl +z恢复到现在记录的类的数据 text2.a = index;//用对话框的index值修改获取对象的脚本值 } } ShowNotification(new GUIContent(Selection.objects.Length + "个物体值被修改"));//按下第二个按钮,会显示提示信息 }
保存int 类型的值 Editorperfabs.setint("保存到这个字段",要被保存的字段)
调用这个被保存的Int 类型的值 Editorperfabs.GetInt("保存到的新字段",第一次打开这个对话框的显示值)
void OnEnable() { index= EditorPrefs.GetInt("IndexKey", index);//在窗口被打开时,第一次使用index赋值给index,以后再打开就把保存的indexkey值赋予index,这样就完成保存每次修改的Index的值 } EditorPrefs.SetInt("IndexKey", index);//把面板中修改的index值,保存到IndexKey中
foreach (var go in enemy) { a++; if (go.transform.tag == "enemy")//获取选中标签为enemy的物体 { text1 text2 = go.GetComponent<text1>();//获取他们的text1脚本 Undo.RecordObject(text2, "change");//把text2这个类的数据存储起来,类修改后,可以ctrl +z恢复到现在记录的类的数据 text2.a += index;//用对话框的index值修改获取对象的脚本值 EditorPrefs.SetInt("IndexKey", index);//把面板中修改的index值,保存到IndexKey中 } EditorUtility.DisplayProgressBar("进度", a + "/" + enemy.Length, a / enemy.Length);//显示修改数值的进度 } EditorUtility.ClearProgressBar();//修改数值结束,关闭进度条
using UnityEditor; public class WindowEdior : EditorWindow { //脚本继承editorWindow [MenuItem("windows/createWindows",false,1)]//创建createwindows按键,实现创建窗口的功能 static void create() { WindowEdior window = EditorWindow.GetWindow<WindowEdior>();//创建窗口 window.Show();//显示窗口 } }
原文:https://www.cnblogs.com/zhangyang4674/p/10976556.html