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

news2025/6/16 20:41:09

文章目录

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

1 特殊文件夹 Editor

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

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

image-20240208224523481

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

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

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

  • 命名空间:UnityEditor

  • 特性:MenuItem

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

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

  • 注意:

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

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

  • 命名空间:UnityEditor

  • 特性:MenuItem

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

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

  • 注意:

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

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

  • 命名空间:UnityEngine

  • 特性:AddComponentMenu

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

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

  • 注意:

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

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

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

  • 命名空间:UnityEditor

  • 特性:MenuItem

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

  • 注意:

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

7 加入快捷键

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

  • 组合键:下划线替换为

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

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

8 小结

  1. 使用 UnityEditor 命名空间的脚本必须放在 Editor 文件夹下,避免打包报错。
  2. 添加自定义页签,需要用到特性 MenuItem。
  3. 添加代码添加页签,需要用到特性 AddComponentMenu。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1441497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据在内存中的存储:深入了解与理解技巧

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty‘s blog 引言 ​ 我们早就学完基本的数据类型,那这些数据类型…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能,PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

【Linux系统学习】2.Linux基础命令

Linux基础命令 Linux的目录结构 Linux命令入门 目录切换相关命令(cd/pwd) 相对路径、绝对路径和特殊路径符 创建目录命令(mkdir) 文件操作命令part1(touch、cat、more) 文件操作命令part2(cp、mv、rm) 查找命令(which、find) grep、wc和管道符…

零基础学编程怎么入手,中文编程工具构件箱之渐变背景构件用法教程,系统化的编程视频教程上线

零基础学编程怎么入手,中文编程工具构件箱之渐变背景构件用法教程,系统化的编程视频教程上线 一、前言 今天给大家分享的中文编程开发语言工具资料如下: 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例…

C++三剑客之std::any(一) : 使用

相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析​​​​​​​ 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…

代码随想录 Leetcode376. 摆动序列

题目&#xff1a; 代码&#xff08;首刷看解析 2024年2月9日&#xff09;&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int direction 0;//1上升&#xff0c;0下降int res 0;//res…

【Linux系统学习】3.Linux用户和权限

Linux用户和权限 1.认知root用户 1.1 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; 而在前期&#…

企业注册资金五年完成实缴,认缴企业该何去何从

新的《公司法》要求企业注册资本金必须在5年内完成实缴。很多企业在原来注册时&#xff0c;乐观地登记了大额的认缴注册资本金。要在未来5年完完成实缴很多企业都是比较困难的。 那么小编现在看到的解决方案有三个&#xff1a; 一、减少企业注册资本金&#xff0c;并完成实缴…

【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】

文章目录 函数实现数据大小端转换函数语法函数使用的规则Verilog and Testbench综合图VCS 仿真波形 函数实现数据大小端转换 在数字芯片设计中&#xff0c;经常把实现特定功能的模块编写成函数&#xff0c;在需要的时候再在主模块中调用&#xff0c;以提高代码的复用性和提高设…

Quartus工程的qsf配置约束文件介绍

一、qsf文件概述 qsf&#xff1a;Quartus Setting File&#xff0c;是Quartus工程的配置文件&#xff1b; 包含一个Quartus工程的所有约束&#xff0c;包括工程的软件版本信息、FPGA器件信息、引脚约分配、引脚电平分配&#xff0c;编译约束和用于Classic TimingAnalyzer的时…

函数及函数的定义

前言&#xff1a; 在之前介绍指针的时候&#xff0c;小编发现有些地方需要用函数&#xff0c;所以小编决定先带领大家学习函数&#xff0c;然后再学习指针。 函数是从英文function翻译过来的&#xff0c;其实function在英文中的意思就是函数&#xff0c;也是功能的意思&#xf…

Electron基本介绍

Electron基本介绍 Electron 官方网站&#xff1a;https://www.electronjs.org/zh/ Electron安装方法&#xff1a;npm install electron -g 全局安装 Electron简介&#xff1a;Electron提供了丰富的本地&#xff08;操作系统&#xff09;API&#xff0c;使你能够使用纯JavaScr…

Git分支常用指令

目录 1 git branch 2 git branch xx 3 git checkout xx 4 git checkout -b xx 5 git branch -d xx 6 git branch -D xx 7 git merge xx(含快进模式讲解) 1 git branch 作用&#xff1a;查看分支 示例&#xff1a; 2 git branch xx 作用&#xff1a;创建分支&#xf…

WordPress函数wptexturize的介绍及用法示例,字符串替换为HTML实体

在查看WordPress你好多莉插件时发现代码中使用了wptexturize()函数用来随机输出一句歌词&#xff0c;下面boke112百科就跟大家一起来学习一下WordPress函数wptexturize的介绍及用法示例。 WordPress函数wptexturize介绍 wptexturize( string $text, bool $reset false ): st…

Redis Centos7 安装到启动

文章目录 安装Redis启动redis查看redis状况连接redis服务端 安装Redis 1.下载scl源 yum install centos-release-scl-rh2.下载redis yum install rh-redis5-redis 3. 创建软连接 1.cd /usr/bin 2. In -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server 3. …

一周学会Django5 Python Web开发-Django5创建项目(用命令方式)

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计11条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

vue3 之 商城项目—一级分类

整体认识和路由配置 场景&#xff1a;点击哪个分类跳转到对应的路由页面&#xff0c;路由传对应的参数 router/index.js import { createRouter, createWebHashHistory } from vue-router import Layout from /views/Layout/index.vue import Home from /views/Home/index.vu…

【Java IO】同步异步和阻塞非阻塞真正的区别!!!

先上结论&#xff1a; 同步异步和阻塞非阻塞真正的区别&#xff01;&#xff01;&#xff01; 假设某个进程正在运行下面这段代码&#xff1a; ...... operatorA......; read(); operatorB......; operatorC......;当进程执行完operatorA后开始进行read系统调用&#xff0c;…

机器学习系列——(二十)密度聚类

引言 在机器学习的无监督学习领域&#xff0c;聚类算法是一种关键的技术&#xff0c;用于发现数据集中的内在结构和模式。与传统的基于距离的聚类方法&#xff08;如K-Means&#xff09;不同&#xff0c;密度聚类关注于数据分布的密度&#xff0c;旨在识别被低密度区域分隔的高…

TCP/IP协议以及UDP(超详细,看这一篇就够了)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;TCP/IP协议以及UDP(超详细,看这一篇就够了) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 TCP/IP协议以及UDP(超详细,看这一篇就够了 前提概括接收端和发送端客户…