本文将讲一下在UnityEditor命名空间下的一些特性。

CallBackOrder,这个Attribute是所有带callback index的Attribute的基类,由于官方也没有给出详细的说明,因此这里暂略。

PreferenceItem,这个特性是在Preference界面新加一个选项。以官方代码为例:

注意,这段代码我们放在了一个普通类中,并没有继承自Monobehaviour,其实继不继承都可以,但方法必须是静态方法。

我们在Editor里面选择Preference菜单,可以看到:

ShaderIncludePath,这个特性是2018.1b版本新加的特性。

当我们尝试些一个shader库的时候,会经常需要include一些存在任意位置的文件,这个特性允许你返回一些列的shader include路径。查看官方代码:

internal static class DefaultShaderIncludes
{
[ShaderIncludePath]
public static string[] GetPaths()
{
return new[]
{
"Assets/ScriptableRenderPipeline/",
"Assets/SRP/ScriptableRenderPipeline/LightweightPipeline/Shaders"
};
}
}

DrawGizmo属性允许你为任何一个Component提供一个gizmo渲染器。渲染器的函数必须是静态的,并且需要两个参数:正在绘制的Gizmo的对象,以及指示正在绘制Gizmo的GizmoType。

渲染器的函数可以在任意的函数内,包括Editor文件,这样你不必放在组件脚本中,也不会被包含在工程中。

新建代码如下:

注意Test并没有从Mono继承过来,而这个Attribute有一个可选参数。

在场景中我们新建一个空GO,如图:

默认选中是什么也没有的,把Test脚本中指定ComponentTest的添加到GO上,再次选中,则可以看到:

可以根据自己的具体情况来绘制,具体绘制参考Gizmos类。

InitializeOnLoadInitializeOnLoadMethod这两个特性功能类似,都是在Unity启动时候可以执行一系列操作,这个操作主要针对编辑器。

写了以下代码:

注意构造函数必须为静态的。当Unity启动的时候,会自动运行今天运行里面的内容。同时我们也可以指定一些编辑器里的其他操作。如:

这样,编辑器里会不停地输出。每次修改完代码,编辑器会重新执行一次Test构造函数。

第二个Attribute则是作用于静态函数之上。功能类似。

关于CustomEditorCanEditMultipleObjectsCustomPreviewCustomPorpertyDrawer之后会在关于Editor扩展中进行讲解。

从Unity中的Attribute到AOP(八)的更多相关文章

  1. 从Unity中的Attribute到AOP(七)

    本章我们将依然讲解Unity中的Attribute,继续命名空间在UnityEngine里的. PropertyAttribute,这个特性主要来控制变量或者类在Inspector里面的显示方式.和P ...

  2. 从Unity中的Attribute到AOP(五)

    今天主要来讲一下Unity中带Menu的Attribute. 首先是AddComponentMenu.这是UnityEngine命名空间下的一个Attribute. 按照官方文档的说法,会在Compo ...

  3. 从Unity中的Attribute到AOP(四)

    本篇我们将逐一讲解Unity中经常使用的Attribute(Unity对应的文档版本为2018.1b). 首先是Serializable,SerializeField以及NonSerialized,H ...

  4. 从Unity中的Attribute到AOP(三)

    上一篇我们对系统的Attributes进行了MSIL代码的查看,了解到了其本质就是一个类的构造函数.本章我们将编写自己的Attributes. 首先我们定义书的属性代码,如下: [AttributeU ...

  5. 从Unity中的Attribute到AOP(六)

    本文将重点对Unity剩下常用的Attribute进行讲解,其他不常用的Attribute各位可以自行去官方文档查阅. 首先是UnityEngine命名空间下的. ColorUsage,这个主要作用于 ...

  6. 从Unity中的Attribute到AOP(二)

    上一篇文章我们初步了解了一下Attributes的含义,并且使用系统自带的Attributes写了点代码.在进一步解剖我们的代码之前,我觉得有个概念可能需要巩固一下:什么是元数据? 我们知道C#代码会 ...

  7. 从Unity中的Attribute到AOP(一)

    首先来看一下微软官方对Attributes(C#)的定义: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/conce ...

  8. Unity中使用Attribute

    Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...

  9. Unity应用架构设计(12)——AOP思想的实践

    想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临.你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧.领会了Boss的意图之后,漫长的排查问题 ...

随机推荐

  1. IDEA下Spring Boot的快速搭建

    下边使用的是IDEA快速搭建一个Spring Boot项目 (1)File--New-New Project (2)点击Next填写相应的信息 (3)点击Next,选择Dependencies,这里创 ...

  2. Asynchronous vs synchronous client applications(MQTT)

    来自我的CSDN博客   想查看英文原文的请点击原文网址.在上两篇翻译中,Homejim我给大家分别翻译了同步客户端应用程序和异步客户端应用程序.本人对这两个的区别也有困惑,因此将paho下的这个比较 ...

  3. do {...} while (0) 在宏定义中的作用

    如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍.然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间.在很多的C程序中,你可能会看到许多 ...

  4. 配置程序成为Linux服务

    最近写了个程序需要随Linux启动时自动运行起来, 查了一些方法后, 通过配置程序成为系统的服务实现了这个需求, 在此记录一下. 测试程序 #! /bin/sh while [ true ] do e ...

  5. spring boot使用profile来区分正式环境配置文件与测试环境配置文件

    转载请在页首注明作者与出处 一:前言 经常在开发的时候,项目中的配置文件,在个人开发的时候有一套配置文件,在测试环境有一套配置文件,在正式环境有一套配置文件,这个时候如果配置文件复杂,需要改的东西就特 ...

  6. 自定义结构化config文件

    前言 开发过程中我们会经常使用到各种config文件,经常我们会使用appSettings进行设置所用的配置,但是随着配置量的增多,都放在appSettings里面明显是不合适的,一方面配置容易混乱, ...

  7. mysql 证明为什么用limit时,offset很大会影响性能

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/117 首先说明一下MySQL的版本: mysql> sel ...

  8. UVA 10559 Blocks

    题目大意:有一串带颜色的方块,每次可以消掉颜色相同的一段,得到size^2的分数,问最多能得到多少分数.n≤200. 给这题状态跪下来. 显然的区间DP,但设f[i][j]是不够的. 考虑到之前做过的 ...

  9. 原创js自动补全---auotocomplete

    if ($("input.autocomplete_input").length > 0) { $("input.autocomplete_input") ...

  10. (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决

    区别于其他入门教程的"手把手式",本文更强调"因"而非"果".我之所以加上"通用"字样,是因为在你了解了这个开发环境之后 ...