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");//防止不能撤销操作
         }
     }}