编辑属性

[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
    
    static AttributesExample() 
    {
        [...]
    }

    [InitializeOnLoadMethod]
    private static void Foo()
    {
        [...]
    }
}
[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
    
    static AttributesExample() 
    {
        [...]
    }

InitializeOnLoad 属性允许用户初始化类而无需用户进行任何交互。只要编辑器启动或重新编译,就会发生这种情况。静态构造函数保证在任何其他静态函数之前调用它。

[InitializeOnLoadMethod]
private static void Foo()
{
    [...]
}

InitializeOnLoad 属性允许用户初始化类而无需用户进行任何交互。只要编辑器启动或重新编译,就会发生这种情况。使用此属性的方法无法保证执行顺序。

[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 
{

    public int MyInt;

    private static string prefsText = "";

    [PreferenceItem( "My Prefs" )]
    public static void PreferencesGUI()
    {
        prefsText = EditorGUILayout.TextField( "Prefs Text", prefsText );
    }

    [MenuItem( "Attributes/Foo" )]
    private static void Foo()
    {
        [...]
    }

    [MenuItem( "Attributes/Foo", true )]
    private static bool FooValidate() 
    {
        return false;
    }
}

[PreferenceItem]属性的结果

StackOverflow 文档

[MenuItem]属性的结果

StackOverflow 文档

[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 

CanEditMultipleObjects 属性允许你通过多个 GameObjects 编辑组件中的值。如果没有此组件,在选择多个 GameObject 时你将看不到组件看起来像是正常但是你会看到消息不支持多对象编辑

此属性适用于自定义编辑器以支持多重编辑。非自定义编辑器自动支持多重编辑。

[PreferenceItem( "My Prefs" )]
public static void PreferencesGUI()

PreferenceItem 属性允许你在 Unity 的首选项菜单中创建一个额外的项目。接收方法需要是静态的才能使用它。

[MenuItem( "Attributes/Foo" )]
private static void Foo()
{
    [...]
}

[MenuItem( "Attributes/Foo", true )]
private static bool FooValidate() 
{
    return false;
}

MenuItem 属性允许你创建自定义菜单项以执行功能。此示例也使用验证器函数(始终返回 false)以防止执行该函数。

[CustomEditor( typeof( MyComponent ) )]
public class AttributesExample : Editor
{
    [...]
}

CustomEditor 属性允许你为组件创建自定义编辑器。这些编辑器将用于在检查器中绘制组件,并需要从 Editor 类派生。

[CustomPropertyDrawer( typeof( MyClass ) )]
public class AttributesExample : PropertyDrawer 
{
    [...]
}

CustomPropertyDrawer 属性允许你在检查器中创建自定义属性抽屉。你可以将这些抽屉用于自定义数据类型,以便可以在检查器中看到它们。

[DrawGizmo( GizmoType.Selected )]
private static void DoGizmo( AttributesExample obj, GizmoType type )
{
    [...]
}

DrawGizmo 属性允许你为组件绘制自定义小控件。这些小玩意将在场景视图中绘制。你可以使用 DrawGizmo 属性中的 GizmoType 参数来决定何时绘制 Gizmo。

接收方法需要两个参数,第一个是绘制 Gizmo 的组件,第二个是需要绘制 Gizmo 的对象所在的状态。