1. 插件扩展

1.1. 命名空间

using UnityEditor;
using UnityEngine; //非必需,常用到

1.2. 使用语法

[MenuItem("Assets/My Test")]
private static void Test()
{
Debug.Log("Hello World!")
}

语法说明

[MenuItem("path $t", Is, Priority)]
private static void Test1()
{} [MenuItem("path _t", Is, Priority)]
private static void Test2()
{}
  • path 是菜单路径;

    • 一级菜单名称不支持中文
  • $t 是一个快捷键实例,在路径后面接空格,然后加上快捷键表示,单纯的一个按键快捷键按键字符前带下划线。该项非必需
    • % 表示 ctrl
    • # 表示 shift
    • & 表示 alt
  • Is 设置为true的时候,如果没有选中游戏对象,会显示不可用状态,该选项非必需
  • Priority 是优先级,数值越小优先级越高,非必需,其默认值为1000。

下面表示快捷键为"ctrl+h" 的实例。

[MenuItem("Assets/My Test %h")]
private static void Test()
{
Debug.Log("Hello World!")
}

1.3. Selection类

https://docs.unity3d.com/ScriptReference/Selection.html

1.3.1. 获取选中物体

Selection.Objects可以获得选中的物品。

1.3.2. 获取选中目录

string[] guids = Selection.assetGUIDs;
foreach ( var id in guids )
{
string path = AssetDatabase.GUIDToAssetPath(id);
if(Directory.Exists(path))
{
Debug.Log(string.format("Directory {0} exist", path))
}
}

1.4. 给控件添加右上角齿轮菜单增加功能

[MenuItem("CONTEXT/Rigidbody/wyg_test")]
private static TestRightButton()
{
Debug.Log("右键测试")
}
  • CONTEXT 为固定写法;
  • Rigidbody 是控件名称,可以修改为其他控件;
  • 我使用中文的时候不知道为什么没有显示出来。



1.5. 弹窗

编辑器的弹窗类需要继承EditorWindow

使用方法与GUI的使用方法基本一致,有Init,Awake,OnGUI等函数。

class TestWindow : EditorWindow
{
public void Init()
{
} publick void OnGUI()
{
GUILayout.Label("Test Window");
if (GUILayout.Button("Button"))
{
Debug.Log("On Button")
}
}
}

2. 组件属性展示

以下效果都是组件的显示,所以是属于using UnityEngine;的。

2.1. Range

可以将数值的展示效果变成滑动条效果。

[Range(1, 12)]
public int month;



2.2. Multiline/TextArea

控制占用多行显示。

[Multiline(5)]
public string msg1; [TextArea(3,5)]
public string msg2; // 最少显示三行,最多显示五行



2.3. ContextMenuItem/ContextMenu

添加右键小菜单,添加一些小功能。

[ContextMenuItem("Random", "RandomNumber")]
[ContextMenuItem("Reset", "ResetNumber")]
public int number; void RandomNumber()
{
number = Random.Range(0, 100);
} void ResetNumber()
{
number = 0;
}



还有一个ContextMenu的特性,用法类似。

public string Name;

[ContextMenu("Reset Name")]
private void ResetName()
{
Name = "";
}



2.4. ColorUsage

设置颜色选择器。

public Color color1;

[ColorUsage(false)]
public Color color2; // 没有alpha [ColorUsage(true, true, 0, 8, 0.125f, 3)]
public Color color3; // HDR

[Unity]Unity3D编辑器插件扩展和组件扩展的更多相关文章

  1. Unity3D编辑器扩展(四)——扩展自己的组件

    前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...

  2. Unity3D编辑器扩展(六)——模态窗口

    前面我们已经写了5篇关于编辑器的,这是第六篇,也是最后一篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)—— ...

  3. Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类

    前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...

  4. Unity 3D编辑器扩展介绍、教程(二) —— 创建窗口

    Unity编辑器扩展教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Brief Introd ...

  5. 百度umeditor富文本编辑器插件扩展

    富文本编辑器在WEB开发中经常用到,个人比较喜欢用百度出的ueditor这款,ueditor这款本身支持插件扩展的,但是ueditor的mini版本 umeditor 就没有那么方便了,不过找了很多资 ...

  6. 扩展Unity3D编辑器的脚本模板

      近期在学习Shader时感觉Shader语言參数众多.语法诡异,假设每次都从头開始写Shader一定是一件痛苦的事情.假设能够在本地定义好一组标准的Shader模板,这样当我们须要实现某些效果相似 ...

  7. 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)

    背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...

  8. .NET平台开源项目速览(5)深入使用与扩展SharpConfig组件

    上个月在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧  和 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 中都提到了SharpConfig组件,简单轻量级 ...

  9. Java高并发 -- J.U.C.组件扩展

    Java高并发 -- J.U.C.组件扩展 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 FutureTask Future模式,核心思想是异步调用.和同步调用的区别 ...

随机推荐

  1. 页面性能优化和高频dom操作

    一.DOM操作影响页面性能的核心问题 通过js操作DOM的代价很高,影响页面性能的主要问题有如下几点: 访问和修改DOM元素 修改DOM元素的样式,导致重绘或重排 通过对DOM元素的事件处理,完成与用 ...

  2. jvm 常用内存分析命令

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt121 // 打印出内存占用情况 jstat -gcutil 12564 10 ...

  3. LINUX下C语言编程调用函数、链接头文件以及库文件

    LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...

  4. 解决Android Studio中Refreshing gradle project时间过长的最简单方法

    Refreshing gradle project往往出现在Gradle出现更新,需要从墙外的网重新拖下来的前提下.具体可以查看以下文件:/path/to/project/gradle/wrapper ...

  5. 算法学习:并行化初体验_JAVA实现并行化归并算法

    这个系列包括算法导论学习过程的记录. 最初学习归并算法,对不会使其具体跑在不同的核上报有深深地怨念,刚好算倒重温了这个算法,闲来无事,利用java的thread来体验一下并行归并算法.理论上开的thr ...

  6. 编程零基础应当如何开始学习 Python?

    提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...

  7. 没有闲话和grunt.initConfig()

    grunt.initConfig()为Gruntfile.js的核心部分,它接收对象作为参数. 对象包含两种类型的属性,一种是单纯的变量,一种是task类型.举个栗子: grunt.initConfi ...

  8. MITNIK ATTACK

    Https 443 http 80 TCP/IP 协议栈:将数据封装包头 传输层报头 Ack回复确认位 FIN结束位 SIN 开始位 RST 重置位 Seq 序号位 网络层报头 目的地址 原地址 报文 ...

  9. 团队作业10——beta阶段项目复审

    小组的名字和链接 优点 缺点(bug报告) 最终名次 拖鞋大队 基本功能都实现了,符合用户的需求:每次都能按时完成博客,满足题目要求,所以作业完成的也比较优秀.较alpha版本新增了查重自定义的功能, ...

  10. C++学习笔记——STL(标准模板库)

    1.首先.需要学习C++ 模板的概念 2.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表. ...