Unity编辑器扩展笔记

1.编辑器扩展有什么内容?
  可以自定义一些类、按钮、窗口等方便完成一些重复性工作,方便快速的制作游戏。编辑器扩展内容只会在游戏编辑模式下运行,当游戏运行时这些内容不会运行。新建Editor文件夹,将这扩展内容代码放在改文件夹下。
2.如何在菜单栏中添加菜单项按钮
  添加脚本,在一个静态方法前添加[MenuItem("按钮名称1/按钮名称2")]
  例如添加一个打印hello的按钮如下
  using UnityEngine;
  
using UnityEditor;

  public class Tools
  {
    
    [MenuItem("tools/test1")]
    
    static void Test()
    {
        Debug.Log("hello");
    }
  
}
3.如何给按钮分类
  通过设置优先级来分类
  例如设置一个按钮的优先级为2,[Menultem("windows/my tool",false,2)].
  当两个按钮的优先级相差不超过10时,将会被分到一组。
4.Aset Store下载文件路径
  C:\Users\Administrator\AppData\Roaming\Unity\Asset Store-5.x\Unity Technologies\Unity EssentialsAsset Packs
5.如何给组件的右键菜单添加按钮
  使用[MenuItem("CONTEXT/组件名/按钮名")]
6.如何操作组件修改属性
  使用MenuCommand 传递将要操作的组件
  例如
  [MenuItem("CONTEXT/组件名/按钮名")]    
    static void Test(MenuCommand cmd)  //cmd即为要操作的组件
    {
        Rigidbody rgb = cmd.context as Rigidbody;  //.context 是一个object类型,此处为转换类型
        rgb.mass = 0;
        Debug.Log("hello");
    }
7.如何获取选中的游戏物体
  使用Selection.activeGameObject获取当前选中的第一个游戏物体
  Selection.objects获取所有选中的的游戏物体,返回值是一个object数组
8.如何把删除操作放到操作记录里(当代码执行Object.Destory()操作时不可撤销)
   使用Undo.Destory()操作可撤销
9.如何给菜单项添加快捷键
  [MenuItem("按钮名称1/按钮名称2 空格字母")]
  [MenuItem("按钮名称1/按钮名称2 _s")]
  [MenuItem("按钮名称1/按钮名称2 %s")]//%代表ctrl,#代表shift,&代表alt
10.如何设置菜单项按钮是否启用
  为该方法设置一个验证方法,该验证方法是一个bool类型,且设置MenuItem()方法的第二个参数为true
  [MenuItem("GameObject/my delete", true, 11)]
    
  static bool MydeleteIs()
    {
        if (Selection.objects.Length < 1)
            return false;
        else
            return true;
    }
    
  [MenuItem("GameObject/my delete", false, 11)]
    
  static void Mydelete()
    {
        foreach(Object o in Selection.objects)
        {
            //GameObject.DestroyImmediate(o);
            Undo.DestroyObjectImmediate(o);
        }
    }
11.如何在游戏脚本中直接添加外显示菜单项
  对于整个脚本组件的菜单项而言,直接在方法名上添加代码[ContextMenu("按钮名")]
  对于脚本中某个属性而言,在属性上方添加[ContextMenuItem("按钮名","方法名")],同时在脚本中添加相应的方法。
  且并不要求该方法为静态方法。
  这两个特性都是存在于Unity.Engine命名空间下的
12.如何创建对话框
  首先创建一个继承自ScriptableWizard的类,然后添加一个菜单项,使用ScriptableWizard.DisplayWizard<类名>("对话框名称")显示该对话框即可。
13.如何使用对话框修改所选中的游戏物体的组件的属性
   在继承了ScriptableWizard的类中,重写方法OnWizardCreate()方法,该方法是该类中的默认方法,且默认为空,点击对话框中的Create按钮将会执行该方法,  我们在该方法中通过Selection.gameobjects获取游戏物体,通过getCommpont<组件名>()来得到游戏物体的组件,从而修改组件的属性。同时防止不能撤销操作,添加代码Undo.Recoderobject(对象名,"该条记录名")
14.如何在提示框中显示提示信息
  1)提示框中两个默认属性helpString和errorString分别代表帮助信息和错误信息,可以直接赋值。
  可以通过OnWizardUpdate()//当提示框被加载或者提示框中属性发生改变时运行该方法
  和OnSelectionChange()//当选中物体发生改变时运行该方法
  2)使用ShowNotiFication(new GUIContent("提示信息"));
15.对话框的按钮及触发
  ScriptableWizard.DisplayWizard<类名>("对话框名称","按钮1","按钮2")
  点击按钮将会触发OnWizardCreate()方法,点击按钮2将会触发OnWizardOtherButton()方法
16.编辑模式下如何保存数据
  使用EidtorProfs.SetInt("key","Vaule")来保存每次编辑的值,
  在Enable()方法中,给属性重新赋值
  EidtorProfs.GetInt("key","Vaule")
17.如何创建一个进度条
  EditorUtility.DisplayProgressBar("Title","提示信息",(float)进度条进度)
18.如何创建一个窗口
  首先创建一个继承自EidtorWindow的类,然后定义一个菜单项,在方法内使用如下代码显示窗口
  public class MyWindow : EditorWindow
  {
    
       [MenuItem("Window/my window")]
    
       static void Mywindow()
       {
          MyWindow my = EditorWindow.GetWindow<MyWindow>();  //获取该窗口
          my.Show();//将该窗口显示出来
        }
    
      string name = "";
    
      private void OnGUI()//在OnGUI中绘制改窗口内容
      {
        EditorGUILayout.LabelField("这是一个窗口");
        name = GUILayout.TextField(name);
        if(GUILayout.Button("创建"))
        {         
            GameObject game = new GameObject(name);
            Undo.RegisterCreatedObjectUndo(game,"hello");//防止不能撤销操作
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值