2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏与窗口

文章目录

  • [1 特殊文件夹 Editor](#1 特殊文件夹 Editor)
  • [2 在 Unity 菜单栏中添加自定义页签](#2 在 Unity 菜单栏中添加自定义页签)
  • [3 在 Hierarchy 窗口中添加自定义页签](#3 在 Hierarchy 窗口中添加自定义页签)
  • [4 在 Project 窗口中添加自定义页签](#4 在 Project 窗口中添加自定义页签)
  • [5 在菜单栏的 Component 菜单添加脚本](#5 在菜单栏的 Component 菜单添加脚本)
  • [6 在 Inspector 为脚本右键添加菜单](#6 在 Inspector 为脚本右键添加菜单)
  • [7 加入快捷键](#7 加入快捷键)
  • [8 小结](#8 小结)

1 特殊文件夹 Editor

​ Editor 文件夹是 Unity 中的特殊文件夹,Unity 中所有编辑器相关的脚本都需要放置在其中,其相关的命名空间为 UnityEditor。

​ 使用命名空间 UnityEditor 的脚本最终不能被 Unity 打包,需要将这些脚本放置到 Editor 文件夹中,避免打包时报错。

2 在 Unity 菜单栏中添加自定义页签

  • 命名空间:UnityEditor
  • 特性:MenuItem
  • 用法:在静态函数前加上 [MenuItem("页签/一级选项/二级选项/....")]
  • 作用:当在菜单栏点击该页签时,将执行静态函数中逻辑。
  • 注意:
    1. 不用在意继承对象。
    2. 斜杠必须是 /
csharp 复制代码
public class Lesson1
{
    [MenuItem("Unity编辑器拓展/Lesson1/TestFun")]
    private static void TestFun()
    {
        Debug.Log("TestFun");
    }
}

3 在 Hierarchy 窗口中添加自定义页签

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上,并且页签命名放入 GameObject 路径。

    [MenuItem("GameObject/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
    3. 在菜单栏的 GameObject 中也会出现对应选项。
csharp 复制代码
[MenuItem("GameObject/Lesson1/TestFun2")]
private static void TestFun2()
{
    Debug.Log("TestFun2");
}

4 在 Project 窗口中添加自定义页签

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上,并且页签命名放入 Assets 路径。

    [MenuItem("Assets/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
    3. 在菜单栏的 GameObject 中也会出现对应选项。

5 在菜单栏的 Component 菜单添加脚本

  • 命名空间:UnityEngine

  • 特性:AddComponentMenu

  • 用法:在想要通过 Component 菜单添加的脚本前加上。

    [AddComponentMenu("一级选项/二级选项/....")]

  • 注意:

    1. 脚本需要继承 MonoBehaviour 对象,且不能放在 Editor 文件夹下。
    2. 斜杠必须是 /
    3. 最后一级选项的名字可以和脚本名不一样,但是建议一致。
    4. 添加该特性的代码可以被 Unity 打包,与因为该特性所在的命名空间不为 UnityEditor。
csharp 复制代码
using UnityEngine;

[AddComponentMenu("Unity编辑器拓展/添加脚本/Lesson1_Test")]
public class Lesson1_Test : MonoBehaviour
{ }

6 在 Inspector 为脚本右键添加菜单

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上
    [MenuItem("CONTEXT/脚本名/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
csharp 复制代码
[MenuItem("CONTEXT/Lesson1_Test/Lesson1/自定义功能")]
private static void TestFun4()
{
    Debug.Log("TestFun4");
}

7 加入快捷键

  • 单键:路径后 + 空格 + 下划线 + 想要的按键

  • 组合键:下划线替换为

    1. %表示 Ctrl
    2. #表示 Shift
    3. &表示 Alt
  • 其他支持的按键:

    1. LEFTRIGHT:#LEFT 表示左 Shift 按键。
    2. UPDOWNF1..F12HOMEENDPGUPPGDN
csharp 复制代码
public class Lesson1
{
    [MenuItem("Unity编辑器拓展/Lesson1/TestFun #F1")]
    private static void TestFun()
    {
        Debug.Log("TestFun");
    }
}

8 小结

  1. 使用 UnityEditor 命名空间的脚本必须放在 Editor 文件夹下,避免打包报错。
  2. 添加自定义页签,需要用到特性 MenuItem。
  3. 添加代码添加页签,需要用到特性 AddComponentMenu。
相关推荐
新手unity自用笔记1 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
五花肉村长2 小时前
数据结构-队列
c语言·开发语言·数据结构·算法·visualstudio·编辑器
qinzechen2 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#
嵌入式小能手3 小时前
开发环境搭建之VScode的安装及使用
vscode·编辑器
Artistation Game3 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰3 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
yufei-coder6 小时前
C# Windows 窗体开发基础
vscode·microsoft·c#·visual studio
dangoxiba6 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
AitTech6 小时前
深入理解C#中的TimeSpan结构体:创建、访问、计算与格式化
开发语言·数据库·c#
电子科技圈7 小时前
IAR全面支持国科环宇AS32X系列RISC-V车规MCU
人工智能·嵌入式硬件·mcu·编辑器