Unity插件开发笔记

插件特点,无需运行可进行编译。

分为3大类插件:菜单项相关操作、自定义Inspector检视面板、自定义操作界面。

一.菜单项相关操作的插件分为4种:包含MenuItem菜单项插件、AddComponentMenu组件菜单插件、ContextMenu上下文菜单插件、RequireComponent必要组件菜单

1.MenuItem菜单项插件

(0)选项出现位置:编辑器上方菜单栏 。

(1)脚本放置的目录:Assets/Editor(该目录不会被打到包里)。

(2)创建如下方代码:需要命名空间UnityEditor;可自定义入口路径和自定义快捷键;菜单方法必须是static静态类方法(放在该脚本类的内部)。

(3)特点:无需放到场景里也无需运行,点击使用即可进行编译。

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;//MenuItem类插件需要该命名空间

public class MenuItem_Test1 : MonoBehaviour
{
    //快捷键类型(H是可自定义按键)
    //_H:单一个自定义按键
    //#H: Shift+自定义按键
    //%H:Ctrl+自定义按键
    //&H: Alt+自定义按键
    [MenuItem("Menu/Test_ _H")]//Menu/Test1是自定义的菜单路径,H是自定义的快捷键,放在该MenuItem_Test1类的里面
    public static void Test1()//定义MenuItem菜单操作:菜单必须是static静态方法
    {
        Debug.Log("Test_");
    }

    [MenuItem("Menu/Test# #H")]
    public static void Test2()
    {
        Debug.Log("Test#");
    }

    [MenuItem("Menu/Test% %H")]
    public static void Test3()
    {
        Debug.Log("Test%");
    }

    [MenuItem("Menu/Test& &H")]
    public static void Test4()
    {
        Debug.Log("Test&");
    }
}

2.AddComponentMenu组件菜单插件

(0)选项出现位置:节点上AddComponent增加组件时的可选组件列表里 。

(1)脚本放置的目录:一般在Assets/Script里(可自定义,会被打到包里的目录即可)。

(2)创建如下方代码:可自定义在添加组件时的菜单路径(放在该脚本类的前面)。

(3)特点:跟组件一样,需放到场景里也需运行,才可进行编译。

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[AddComponentMenu("Menu/Test2")]//Test2是Component_Test1类脚本的组件名称,Menu/Test2是添加组件时的菜单路径,放在该Component_Test1类的前面
public class Component_Test1 : MonoBehaviour//定义Component操作
{
    void Start()
    {
        Debug.Log("Component_Test");
    }

    void Update()
    {
    }
}

3.ContextMenu上下文菜单插件

(0)选项出现位置:节点上的组件的右键菜单列表里 。

(1)脚本放置的目录:一般在Assets/Script里(可自定义,会被打到包里的目录即可)。

(2)创建如下方代码:可自定义在组件的右键菜单列表的菜单路径(放在该脚本类的内部)。

(3)特点:场景里需有所在的组件,但无需运行,点击使用即可进行编译。

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

[AddComponentMenu("Menu/Test2")]
public class Component_Test1 : MonoBehaviour
{
    void Start()
    {
        Debug.Log("Component_Test");
    }

    void Update()
    {
    }

    [ContextMenu("Menu3")]//Menu3是组件右键菜单列表里的路径,放在该Component_Test1类的内部
    public void Test()//定义ContextMenu菜单操作
    {
        Debug.Log("ContextMenu_Test");
    } 
}

4.RequireComponent必要组件菜单

(0)选项出现位置:无菜单,自动添加关联的必要组件。

(1)脚本放置的目录:一般在Assets/Script里(可自定义,会被打到包里的目录即可)。

(2)创建如下方代码:可自定义在添加组件时的菜单路径(放在该脚本类前面AddComponentMenu语句的前面)。

(3)特点:场景里需添加对应组件,无需运行,即可自动进行编译。

cs 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]//设置该脚本类Component_Test1的必要组件菜单-Rigidbody(自定义的必要组件):添加该脚本,会自动添加Rigidbody组件。不算严格意义的组件,主要是给该脚本类设置关联。Rigidbody是依附于该脚本类Component_Test1的,需先删除本脚本,才能删除Rigidbody组件
[AddComponentMenu("Menu/Test2")]
public class Component_Test1 : MonoBehaviour
{
    void Start()
    {
        Debug.Log("Component_Test");
    }

    void Update()
    {
    }
}
相关推荐
Rabitebla3 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
坤坤子吖7 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
YLCHUP11 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
寂寞的船12 小时前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
旖旎夜光13 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
星恒随风1 天前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
2603_969694851 天前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea1 天前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
寂寞的船1 天前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
Go Work1 天前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记