从Unity中的Attribute到AOP(六)
本文将重点对Unity剩下常用的Attribute进行讲解,其他不常用的Attribute各位可以自行去官方文档查阅。
首先是UnityEngine命名空间下的。
ColorUsage,这个主要作用于Inspector面板的颜色区域,代码使用如下:

构造函数有两个,一个只需要填入是否显示Alpha值即可,如果选择false,在Inspector面板将看不到alpha通道选择。
后面的亮度和曝光度大小取决于hdr是否为true。hdr开启后具体怎么样,各位可以自行去了解,我实在是不知道-_-。
CreateAssetMenu,如果你有一键创建.asset文件的需求,就可以用这个menu,上一篇文章忘讲了-_-。
我们新建一个ScriptableObject文件。代码如下:
在project视图中任意位置右键,在create菜单中可以看到我们定义的菜单项,点击可以新建一个asset文件。具体参数和表现相信我不用多说了。
Delayed,这个属性主要作用于float,int或者string等字段,效果是在Inspector字段,给序列化参数赋值时,必须按回车才能够确认。否则会被还原回之前的值。这个操作个人觉得可以用在一些较为复杂的字段区域中。比如playersetting里的宏定义就带有这个属性,有时候我们输入免不了会出错,不按回车,给了我们一个纠正的机会。

经过测试,这个delay挺坑爹的,Inspector随便找个区域点点,值就被保存下来了。。。不推荐使用。
DisallowMultipleComponent,很好理解的一个属性,建议我们写的所有附加脚本都要这个属性。当你尝试添加第二个脚本的时候,会弹出错误:

如果之前已经加过多个,则不会报错,需要注意。
ExecuteInEditMode,默认情况下我们所有的MonoBehaviours只能在运行模式下才能调到Awake,Update等参数。这个属性可以使其在编辑器未运行状态调到所有覆写参数。
有几个函数需要注意,OnRenderObject或者其他绘制函数,会在每次重绘场景视图或者游戏视图的时候被调用,因此你随便拖动鼠标,对比点点,都可能被多次调用,除非有特殊需求,一般不推荐使用。
OnGUI函数会在游戏视图(Game View)收到event的时候被调用。看了一下,修改项目树形结构,或者最大化最小化,或者鼠标移进移出游戏视图,都可能被调用到。但并不是每帧调用。
其他几个,Awake,OnEnable和Start会在预制初拖入场景或者克隆的时候被调用,调用顺序和运行时完全一致。显示隐藏会调用OnEnable和OnDisable。删除预制会调用OnDisable。每次你更改结构目录都会调用Update,同时Update也不是每帧都会被调用。
GUITarget,这个属性作用于OnGUI函数。指定OnGUI里的显示内容在哪些display视图中显示,具体参数含义可以参考官方文档。

Header,这个属性可以在Inspector面板中为特定参数添加一个小标题,添加代码如下:

在监视面板中:

需要注意,Header不能添加到类定义字段上面
如果你有一个自定义文档需要说明当前监视器里参数的话,可以用HelpURL。
修改代码如下:

注意只能附加到类定义上。

点击Test后面的问号。可以跳转到你给的网页啦!
ImageEffectAllowedInSceneView,具有此属性的任何图像效果可以渲染到场景视图相机中,具体用法太麻烦,这里不作说明

在这里可以看到Image Effects。具体可参考Image Effects。
还有ImageEffectOpaque和ImageEffectTransformsToLDR这两个特性,用的不多,这里先占坑。以后研究一下再说明。
Multiline,这个特性可以给string字段在监视面板中显示多行。
代码如下:


PreferBinarySerialization,这个特性只能用于ScriptableObject类型,尤其是当你的asset文件含有大量数据的时候,始终保持存储为二进制,可以提高读写性能,同时也保持更为紧凑的数据存储。
用notepad++打开我们刚才创建的自定义资源.asset文件,可以看到:

十分醒目,也不安全。
加上PreferBinarySerialization特性后:
记得重新创建一个Asset文件,原来的不会被修改,用notepad++查看会发现全变成了二进制。而单个asset文件的大小也从13kb降到了5kb,成绩喜人。
需要注意的是,序列化方式必须唯一,对于资源文件中内嵌资源文件的,请使用统一的序列化方式,否则unity会自动采用主资源的序列化方式,可能会造成一些问题。场景文件始终遵循项目配置的序列化方式,因此场景中嵌入的asset文件,PreferBinarySerialization属性总是会被忽略。
暂时写到这,其他的属性放到下一篇文章。。太特么多了。
从Unity中的Attribute到AOP(六)的更多相关文章
- 从Unity中的Attribute到AOP(七)
本章我们将依然讲解Unity中的Attribute,继续命名空间在UnityEngine里的. PropertyAttribute,这个特性主要来控制变量或者类在Inspector里面的显示方式.和P ...
- 从Unity中的Attribute到AOP(五)
今天主要来讲一下Unity中带Menu的Attribute. 首先是AddComponentMenu.这是UnityEngine命名空间下的一个Attribute. 按照官方文档的说法,会在Compo ...
- 从Unity中的Attribute到AOP(四)
本篇我们将逐一讲解Unity中经常使用的Attribute(Unity对应的文档版本为2018.1b). 首先是Serializable,SerializeField以及NonSerialized,H ...
- 从Unity中的Attribute到AOP(三)
上一篇我们对系统的Attributes进行了MSIL代码的查看,了解到了其本质就是一个类的构造函数.本章我们将编写自己的Attributes. 首先我们定义书的属性代码,如下: [AttributeU ...
- 从Unity中的Attribute到AOP(八)
本文将讲一下在UnityEditor命名空间下的一些特性. CallBackOrder,这个Attribute是所有带callback index的Attribute的基类,由于官方也没有给出详细的说 ...
- 从Unity中的Attribute到AOP(二)
上一篇文章我们初步了解了一下Attributes的含义,并且使用系统自带的Attributes写了点代码.在进一步解剖我们的代码之前,我觉得有个概念可能需要巩固一下:什么是元数据? 我们知道C#代码会 ...
- 从Unity中的Attribute到AOP(一)
首先来看一下微软官方对Attributes(C#)的定义: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/conce ...
- Unity中使用Attribute
Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...
- NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...
随机推荐
- ElasticSearch和ElasticSearch Head环境搭建和数据模拟
首先elasticsearch-6.0.0\bin目录下运行elasticsearch服务 修改elasticsearch-6.0.0\elasticsearch.yml文件 在文件最后加入下面代码, ...
- [转]压缩感知重构算法之分段正交匹配追踪(StOMP)
分段正交匹配追踪(StagewiseOMP)或者翻译为逐步正交匹配追踪,它是OMP另一种改进算法,每次迭代可以选择多个原子.此算法的输入参数中没有信号稀疏度K,因此相比于ROMP及CoSaMP有独到的 ...
- Idea中右边的maven projects窗口找不到了如何调出来
关于Idea中右边的maven projects窗口找不到了如何调出来? 具体的idea版本我不太清楚,我用的是2016版,其他版本应该也是一样的. 首先idea自带了maven控件,不像Eclip ...
- 常见.NET功能代码汇总 (3)
33,彻底关闭Excel进程 .NET中使用Excel属于使用非托管资源,使用完成后一般都要用GC回收资源,但是,调用GC的位置不正确,Excel进程可能无法彻底关闭,如下面的代码: static v ...
- 4. sudo,PATH环境变量,修改字符集,ntpserver,加大文件描述符,隐藏内核版本,锁定关键系统文件
1 命令: visudo 98gg 98行 yy 复制当前行 p ...
- Java之数据类型,变量赋值
Java中的基础数据类型(四类八种): 1.整数型 byte----使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值.byte型是整型中所分配的内存空间是最 ...
- Jrebel简单的热部署一个web工程
前言:博主最近在做Hybris开发,漫长的启动时间大大的拖累了项目的进度,而Jrebel的出现就是为了减少项目重启的时间或者说修改了代码后直接不用重启就可以看到修改的结果,但是Hybris的部署一直没 ...
- bzoj 2727: [HNOI2012]双十字
Description 在C 部落,双十字是非常重要的一个部落标志.所谓双十字,如下面两个例子,由两条水平的和一条竖直的"1"线段组成,要求满足以下几个限制: 我们可以找到 5 个 ...
- curl 命令详解
curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS.f ...
- Oracle 用户操作表权限
grant select any table to xxx 将使得xxx用户能够查看到所有用户的表:正确的授权不能是这样: 用户是隔离表的schema,授权时..