Unity编辑器扩展

只做记录,以后方便查阅

[MenuItem("路径")] 

使当前静态方法在菜单栏显示 无视访问权限

第二个参数 没有选择对象时 是否进行进行操作  

验证方法:

[MenuItem("GameObject/Test1", true, 13)]
public static bool Test1Validate(MenuCommand cmd)
{
return true;
}
[MenuItem("GameObject/Test1", false, 13)]
public static void Test1()
{
Debug.Log("Test1");
}

第三个参数 每一个菜单栏的priority优先级默认1000(每个分级相差11以上会出现分割线)

 

//创建弹窗
public class EnemyChange : ScriptableWizard

{

  [MenuItem("Create/EnemyChangeWizard")]
  public static void CreateWizard()
  {
  ScriptableWizard.DisplayWizard<EnemyChange>("修改地图加载路径","Change");
  }
  public string path = "";
  public int time = 10;
  //检测Create按钮点击
  public void OnWizardCreate()
  {
  foreach (var item in Selection.gameObjects)
    {
      Enemy enemy = item.GetComponent<Enemy>();
      Undo.RecordObject(enemy, "Change Enemy");
      enemy.path += path;
      enemy.time += time;
    }
  }

  //字段值改变会调用 打开默认调用一次
  public void OnWizardUpdate()
  {

    helpString;//帮助提示字段
    errorString//警告提示字段

  }

}

 

ShowNotification(new GUIContent("透明的提示信息"));

能在弹窗里面显示提示信息

 

[ContextMenu"操作名字"]

使当前组件的方法能在组件的右键选项里面使用

 

[ContextMenu(“方法名”,“操作名字”)]

能在inspector面板调用 方法

 

CONTEXT

开头的路径为组件的菜单栏

方法参数( MenuCommand cmd)MenuCommand 是当前正在操作的组件 

属性 context 可以转换成当前选择的组件 usename 

路径后面加 空格_快捷键 %ctrl #shift &alt

当需要给菜单栏方法添加快捷键

 

Selection

获取选择的物体

activeGameObject 返回 第一个选择的物体(inspector)

activeObject  返回 第一个选择的物体(包含预制体)

 

Undo

删除操作前面加,可以撤销

Undo.RecordObject 记录当前操作

 Undo.RegisterCreatedObjectUndo 记录代码创建物体到操作记录里

EditorPrefs

保存编辑器的一些记录和PlayerPrefs类似

 

EditorUtility.DisplayProgressBar

显示进度条   

EditorUtility.DisplayCancelableProgressBar

显示进度条有按钮

EditorUtility.ClearProgressBar

清除进度条显示

 

创建一个长期使用的窗口类 

public class MyWindow : EditorWindow
{
  public static MyWindow window;
  [MenuItem("Window/show myWindow")]
  static void ShowMyWindow()
  {
    window = EditorWindow.GetWindow<MyWindow>();
    window.Show();//显示窗口
  }
  private string inputValue = "";
  private void OnGUI()
  {
    GUILayout.Label("MyWindow");
    inputValue = GUILayout.TextField(inputValue);
    if (GUILayout.Button("CreateCube"))
    {
      GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
      go.name = inputValue;
    }
    if (GUILayout.Button("CreateAndClose"))
    {
      GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
      go.name = inputValue;
      window.Close();
    }
  }
}

 

posted on 2019-02-20 12:38  反向学习  阅读(180)  评论(0)    收藏  举报

导航