unity编辑器扩展
来源:互联网 发布:我本知这世界 编辑:程序博客网 时间:2024/05/17 04:26
一、在菜单栏添加按钮、在project和Herarity里点击鼠标右键出现按钮 MenuItem
using UnityEditor;using UnityEngine; //Editor下文件不会被打包,只能在编辑器下起作用public class Tools { //第一种 菜单栏添加按钮 //第三个参数为显示的优先级,优先级越小越在上,每一个菜单栏的priority的优先级默认为1000,如果相邻的优先级大于11,就相当于分类 [MenuItem("Tools/Test1",false,4)] static void Test1() { Debug.Log("添加成功!"); } //在GameObject菜单栏和Hierarchy视图里点击鼠标右键显示 [MenuItem("GameObject/my tool",false,10)] static void Test2() { Debug.Log("添加成功!"); } //在菜单栏和project里点击鼠标右键显示AssetButton [MenuItem("Assets/assetButton")] static void Test3() { Debug.Log("添加成功!"); } //资源商店下载的存放位置 C:\Users\huang\AppData\Roaming\Unity\Asset Store-5.x\Unity Technologies}
二、鼠标在组件上点击右键添加按钮 MenuCommand
using UnityEngine;using UnityEditor;public class PlayEditor { //鼠标右键点击组件出现,并进行操作 [MenuItem("CONTEXT/PlayerHealth/InitHeathAndSpeed")] //CONTEXT(大写) 组件名 按钮名 static void InitHeathAndSpeed(MenuCommand cmd) //MenuCommand是当前正在操作的组件 { Debug.Log(cmd.context.GetType().FullName); CompleteProject.PlayerHealth health = cmd.context as CompleteProject.PlayerHealth; //强制转换成PlayerHealth类型 health.startingHealth = 200; health.flashSpeed = 10; Debug.Log(cmd.context.name); //输出组件所在游戏物体的名字 Debug.Log("Init"); }}
三,选中Selection和可以撤回的删除以及给按钮添加快捷键
[MenuItem("Tools/show info",false,4)] static void showinfo() { //Debug.Log(Selection.activeGameObject.name); //选中多个,只显示第一个对象的名字 Debug.Log(Selection.objects.Length); //选中的数量 } //启用按钮 不启用时按钮为灰色 写在按钮的前面,名字必须一样 [MenuItem("GameObject/my delete",true,10)] static bool MyDeleteValidate() { if (Selection.objects.Length > 0) return true; else return false; } // 制作自己的删除功能按钮 [MenuItem("GameObject/my delete",false,10)] static void MyDelete() { //无法撤回的删除功能 //foreach(Object o in Selection.objects) //{ // GameObject.DestroyImmediate(o); //} //要想撤回删除,需要把删除操作记录到操作记录里 foreach (Object o in Selection.objects) { Undo.DestroyObjectImmediate(o); } } //给按钮添加快捷键 %=ctrl #=shift &=alt 直接使用字母前加_ [MenuItem("Assets/assetButton _t",false,10)] static void Test3() { Debug.Log("添加成功!"); }
四、在脚本里使用编辑器,改变字段值(ContextMenu,ContextMenuItem)
//在脚本内部修改属性 不需要引用 [ContextMenu("set color")] void SetColor() { flashColour = Color.green; }
//右键字段显示按钮,第一个为按钮名,第二个为方法名 这句必须写在字段前面 [ContextMenuItem("Add Hp", "AddHp")] public int startingHealth = 100; void AddHp() { startingHealth += 20; }
五、按钮打开对话框
using UnityEngine;using UnityEditor;public class EnemyChange : ScriptableWizard { //创建对话框 [MenuItem("Tools/CreateWizard")] static void CreateWizard() { //第一个参数是对话框名称,第二个参数是Create按钮的名字,第三个参数是第二个按钮,点击不会关闭窗口 ScriptableWizard.DisplayWizard<EnemyChange>("统一修改敌人对话框","Change Value","Other Button"); } public int changeHealthValue = 10; public int changeSinkSpeed = 1; //当窗口被创建出来的时候,取值 private void OnEnable() { //赋值 changeHealthValue = EditorPrefs.GetInt("changeHealthValue"); } //Create按钮点击事件 private void OnWizardCreate() { GameObject[] enemyPrefabs=Selection.gameObjects; //显示进度条 EditorUtility.DisplayCancelableProgressBar("进度条", "0/" + Selection.gameObjects.Length + "完成修改值", 0); int count = 0; foreach(GameObject go in enemyPrefabs) { //因为案例有两个相同的,默认操作的是继承自moonbehavior的,本处用的是继承CompleteProject的那个 CompleteProject.EnemyHealth hp = go.GetComponent<CompleteProject.EnemyHealth>(); //对hp进行记录,使其具有撤回的功能,这句话必须写在hp操作的前面 Undo.RecordObject(hp, "change health and speed"); hp.startingHealth += changeHealthValue; hp.sinkSpeed += changeSinkSpeed; count++; EditorUtility.DisplayCancelableProgressBar("进度条", count+"/"+Selection.gameObjects.Length + "完成修改值", (float)count/Selection.gameObjects.Length); } EditorUtility.ClearProgressBar(); //窗口下方的提示信息 ShowNotification(new GUIContent(Selection.gameObjects.Length + "个敌人的信息被修改了")); } private void OnWizardOtherButton() { //调用一下显示效果,并无什么意义 OnWizardCreate(); } //对话框里字段被修改就会调用 private void OnWizardUpdate() { helpString = null; errorString = null; if (Selection.gameObjects.Length > 0) { helpString = "您选择了" + Selection.gameObjects.Length + "个敌人"; } else { errorString = "请至少选择一个敌人"; } //记录保存改变的数值 EditorPrefs.SetInt("changeHealthValue", changeHealthValue); } //选则改变更换提示显示 private void OnSelectionChange() { OnWizardUpdate(); }}
六、自定义窗口
using UnityEngine;using UnityEditor;public class MyWindow :EditorWindow { //自定义视图窗口 [MenuItem("Window/Show MyWindow")] 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); //把创建物体注册到unity里 方便撤回 Undo.RegisterCreatedObjectUndo(go, "Create GameObject"); } }}
阅读全文
0 0
- unity编辑器扩展
- Unity编辑器扩展
- unity 编辑器工具扩展
- unity-编辑器扩展
- unity编辑器扩展
- Unity编辑器扩展
- Unity编辑器扩展
- Unity可扩展编辑器
- unity编辑器扩展
- Unity编辑器扩展
- 【Unity编辑器】UVPreview扩展
- Unity 编辑器扩展教程
- Unity编辑器扩展-菜单项
- Unity编辑器扩展-菜单项
- Unity编辑器扩展之EditorWindow
- Unity编辑器扩展-菜单项
- 扩展Unity编辑器菜单指南
- unity打包选项编辑器扩展
- iOS 键盘类型UIKeyboardType
- Spring Cloud 之 Spring Cloud Eureka(四)
- 欢迎使用CSDN-markdown编辑器
- Ubuntu VLC server搭建
- 51nod 1213 二维曼哈顿距离最小生成树 树状数组
- unity编辑器扩展
- Android UI 自动化测试之UiSelector
- pdf转jpg格式转换器怎么用
- Windows 生物统计框架结构简介(WBF) (指纹识别技术)
- [SMOJ1894]战争
- 博弈--类似Bash--hdu1517 A Multiplication Game
- TensorFlow实战—mnist手写数字识别
- Java网络与线程
- 转的 侵立删 java内存模型