上一讲《从Unity中的Attribute到AOP(7)

本文将讲一下在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扩展中进行讲解。