Unity3D中的Attribute详解(八)
2018-01-17 15:30 星门 阅读(1906) 评论(0) 编辑 收藏 举报本文将讲一下在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类。
InitializeOnLoad和InitializeOnLoadMethod这两个特性功能类似,都是在Unity启动时候可以执行一系列操作,这个操作主要针对编辑器。
写了以下代码:
注意构造函数必须为静态的。当Unity启动的时候,会自动运行今天运行里面的内容。同时我们也可以指定一些编辑器里的其他操作。如:
这样,编辑器里会不停地输出。每次修改完代码,编辑器会重新执行一次Test构造函数。
第二个Attribute则是作用于静态函数之上。功能类似。
关于CustomEditor,CanEditMultipleObjects,CustomPreview,CustomPorpertyDrawer之后会在关于Editor扩展中进行讲解。