LiteralliJeff 发表于 2021-11-22 19:19

Unity手册—Attribute汇总说明

内容取自官方API文档特性说明部分,用于开发参考,辅助开发提升开发效率;特性(Attribute)作用于脚本中的类、变量或方法的上,用[ ]包裹,用于表明其特殊行为,如 ,使变量在 Inspector 面板隐藏;
部分特性还未使用过,且网上资料很少,所以欠缺解释,后期补足
本文原地址:Unity手册—Attribute汇总说明
引用版本:Unity 官方手册 ver. 2020.1 UnityEngine API文档 UnityEditor API文档 .NET特性文档
常用特性

此处列出常用特性,功能说明在下方汇总
菜单 Menu


[*]AddComponentMenu
[*]MenuItem
[*]CreateAssetMenuAttribute
监视器 Inspector


[*]HeaderAttribute
[*]HideInInspector
[*]InspectorNameAttribute
[*]SpaceAttribute
[*]TextAreaAttribute
[*]TooltipAttribute
[*]ContextMenu
[*]ContextMenuItemAttribute
对象/变量 Class/Property


[*]ColorUsageAttribute
[*]DisallowMultipleComponent
[*]MinAttribute
[*]RangeAttribute
[*]RequireComponent
[*]SerializeField
[*]Serializable
[*]NonSerialized
其他


[*]PostProcessBuildAttribute
[*]PostProcessSceneAttribute
[*]InitializeOnLoadAttribute
[*]InitializeOnLoadMethodAttribute
[*]UnityAPICompatibilityVersionAttribute
官方文档特性汇总

UnityEngine Attributes


[*]AddComponentMenu
参数:menuName 菜单名称
作用于类上,将脚本置于 UnityEditor 顶部菜单栏 Component 菜单中的任意选项,而不局限于 Component->Scripts 选项下
将脚本置于 UnityEditor 顶部菜单栏 Component 菜单中的任意选项,而不局限于 Component->Scripts 选项下
   
public class WarlGAttributeSample : MonoBehaviour   {   }






[*]AssemblyIsEditorAssembly
作用于程序集,具有此属性的程序集中的任何类将被视为编辑器类

[*]BeforeRenderOrderAttribute
参数: order 调用顺序
作用于方法上,被作用的方法会被注册为 Application.onBeforeRender 的事件回调,以给定顺序从低到高顺序调用

[*]ColorUsageAttribute
参数:showAlpha 是否显示 Alpha 配置项、HDR 是否高动态范围
作用于 Color 类型变量上,使其可在取色面板配置显示 Alpha 和采用 HDR 标准
   
public Color colorpicker;





[*]ContextMenu
参数:itemName 菜单项名称
作用于非静态方法上,在脚本 Inspector 的 context menu 上添加额外操作(Inspector 上脚本右击菜单)
   
void CustomContext()   
{   
    Debug.Log("WarlGContext");   
}





[*]ContextMenuItemAttribute
参数:name 菜单名、function 方法名
作用于变量上,给作用的变量在Inspector上添加右键菜单方法
   
public string SampleString = "";   
void ResetSampleString()   
{
         SampleString = "WarlGSampleString";   
}





[*]CreateAssetMenuAttribute
参数:fileName 文件名、menuName 菜单名、order 顺序
作用于可脚本化的类上,自动列入Assets/Create 的子菜单中,添加创建".asset"文件的快捷路径
   
public class WarlGAssetMenuSample : ScriptableObject   
{
       public string assetName = "WarlGAssetSample";
}






[*]CustomGridBrushAttribute
参数:defaultBrush 是否替代默认笔刷、defaultName 笔刷名、hideAssetInstances隐藏该笔刷于 tile palette 的资源实例、hideDefaultInstance 隐藏默认笔刷实例
作用于类上,将其定义为 grid brush,可在 palette window 中使用
   
public class WarlGBrush : GridBrushBase   {   }





[*]DelayedAttribute
作用于基本数据类型 float, int 和 string 上,使其在Inspector被修改时不会立即生效,而是在按下回车或移除焦点时

[*]DisallowMultipleComponent
作用于类上,禁止 GameObject 添加多个相同类型组件

[*]ExcludeFromObjectFactoryAttribute
作用于类上,禁止该类及其子类被 ObjectFactory 的方法创建

[*]ExcludeFromPresetAttribute
作用于类上,禁止该类实例被用于创建 Preset 对象

[*]ExecuteAlways
作用于类上,使实例对象脚本无论在 Edit Mode、 Play Mode 都执行;注意区分 Edit Mode 和 Play Mode 代码执行逻辑,Edit Mode 下 Update 仅在 Scene 更改时执行,OnGUI 仅在接收到"仅限Editor之外事件"时(如:EventType.ScrollWheel)且不响应Editor快捷键,OnRenderObject 和其他渲染回调方法在场景重绘时调用。

[*]ExecuteInEditMode
作用于类上,使脚本实例在 Edit Mode 下执行,同ExecuteAlways

[*]GradientUsageAttribute
参数:hdr 是否使用 HDR
作用于 Gradient 类型变量上,配置是否支持 HDR

[*]GUITargetAttribute
作用于方法上(不强制),控制 OnGUI 代码在哪一 Display 展示(Game 窗口下可切换 Display)

[*]HeaderAttribute
参数:header 名称
作用于变量上,给变量在 Inspector 中添加标题头
   
public string header;





[*]HelpURLAttribute
参数:URL 文档链接
作用于类上,为类添加说明链接,可在 Inspector 脚本组件上的"?"标志跳转
   
public class WarlGAttributeSample : MonoBehaviour   {   }

[*]HideInInspector
作用于变量上,使变量在 Inspector 不可见,但可被序列化

[*]ImageEffectAfterScale
作用于 Image Effect (效果待验证),使 Image Effect 在动态分辨率阶段之后渲染

[*]ImageEffectAllowedInSceneView
作用于 Image Effect (效果待验证),使 Image Effect 渲染在 Scene view 相机上

[*]ImageEffectOpaque
作用于 Image Effect (效待验证果),使 Image Effect 渲染在透明图形前、不透明图像后,使扩展了深度缓冲(depth buffer)如环境光遮蔽(SSAO)等效果的 Image Effect 仅作用于不透明像素;此属性可用于减少具有后期处理(post processing)的场景中的视觉伪像(visual artifacts)数量

[*]ImageEffectTransformsToLDR
在使用 HDR 渲染条件下,渲染 Image Effect 切换到 LDR 渲染

[*]ImageEffectUsesCommandBuffer
使用命令缓冲区实现图像效果时使用该属性,Unity会将场景渲染到RenderTexture中,而不是实际的目标中

[*]InspectorNameAttribute
参数:displayName 显示名称
作用于枚举值,更改枚举值在 Inspector 上显示的名称
public enum WarlGEnum   
{
   WarlGEnum1 = 0,
   
   WarlGEnum2 = 1,
   
   WarlGEnum3 = 2,   
}





[*]MinAttribute
变量:min 最小值
作用于 int 和 float 约束变量最小值
   
public int minValue;

[*]MultilineAttribute
作用于 string ,使 string 在 Inspector 显示多行文本区

[*]PreferBinarySerialization
作用于 ScriptableObject 派生类,使用二进制序列化取代项目资源序列化,可提升读写效率,提高压缩表现且无法直接识别,但当资源文件包含多个资源时无法使特定资源使用二进制序列化,嵌入场景的组员也会无视二进制序列化

[*]PropertyAttribute
自定义特性的基类,用于创建自定义特性派生类

[*]RangeAttribute
作用于 int 和 float 变量,限制范围值,在 Inspector 上显示范围条

public int rangValue;





[*]RequireComponent
参数:requiredComponent 组件类型
作用于类,在挂载该脚本同时会自动挂载该脚本依赖的组件,且删除时弹出警告
   
public class WarlGAttributeSample : MonoBehaviour   {   }

[*]RPC
已废弃

[*]RuntimeInitializeOnLoadMethodAttribute
作用于静态方法,允许运行时情况下加载游戏后,无需用户行为即可初始化运行时类方法;被该特性标记的方法会在游戏加载完成 Awake 方法执行后执行,但所有被标记方法执行顺序不定

[*]SelectionBaseAttribute
作用于类,使被挂载的 GameObject 优先被选中;如当前 GameObject 为子物体,当点击该物体时会默认选中父物体,在该特性脚本挂载到子物体后会优先选中子物体

[*]SerializeField
作用于所有类型,被标记的私有类、变量等会被强制序列化;
注该序列化为 Unity 内部的序列化系统与 .NET 序列化方法无关,Unity 序列化系统可操作非静态公共字段和被 SerializeField 标记的非静态私有字段,无法序列化属性和静态字段;有关序列化内容可见链接
   
private int privateValue;

[*]SerializeReference
作用于引用对象,使 Unity 序列化对象为引用类型;Unity 默认除 UnityEngine.Object 派生类以外类型都序列化为值类型

[*]SharedBetweenAnimatorsAttribute
作用于类,使特定 StateMachineBehaviour 仅实例化一次病在所有 Animator 之间共享

[*]SpaceAttribute
作用于所有字段,在 Inspector 添加空行像素

[*]TextAreaAttribute
参数:maxLines 最大行、minLines 最小行
作用于 string 类型,在 Inspector 添加高度灵活可滑动的文本区

[*]TooltipAttribute
作用于字段,为字段在 Inspector 添加悬浮解释文字
   
public int toolTip = 0;





[*]UnityAPICompatibilityVersionAttribute
作用于程序集,声明程序集兼容版本
UnityEngine.Animations


[*]NotKeyableAttribute
作用于属性,使其不可动画(无法添加关键帧)
UnityEngine.Scripting


[*]AlwaysLinkAssemblyAttribute
无论程序集是否被引用都强制 UnityLinker 处理程序集

[*]PreserveAttribute
作用于所有类型,避免类、方法、字段或属性在字节码精简时被删除
UnityEngine.Serialization


[*]FormerlySerializedAsAttribute
作用于字段,在不丢失已序列化值得情况下重命名一个字段
UnityEngine.TestTools


[*]ExcludeFromCoverageAttribute
将程序集、类、构造方法、方法、结构体从代码覆盖率方法中剔除
UnityEngine.VFX


[*]VFXEventAttribute
作用于类,用于处理发送到使用 VisualEffect.SendEvent 系统的属性   
UnityEditor Attributes


[*]CallbackOrderAttribute
需要回调的特性基类

[*]CanEditMultipleObjects
作用于类,使自定义编辑器支持多对象编辑

[*]CustomEditor
作用于类,声明该类为运行时自定义编辑器类

[*]CustomEditorForRenderPipelineAttribute
作用于类,声明该类为基于渲染管线创建的运行时自定义编辑器类

[*]CustomPreviewAttribute
作用于字段,为指定类型在 Inspector 添加额外预览

[*]CustomPropertyDrawer
声明自定义 PropertyDrawer 用于哪种运行时序列化类或属性

[*]DrawGizmo
作用于静态方法,使任意组件支持 gizmo 渲染方法
   
static void DrawGizmoForMyScript(MyScript scr, GizmoType gizmoType)   
{
   Vector3 position = scr.transform.position;
   if (Vector3.Distance(position, Camera.current.transform.position) > 10f)
       Gizmos.DrawIcon(position, "MyScript Gizmo.tiff");   
}

[*]FilePathAttribute
用于指定文件对项目目录或引用目录的相对地址

[*]InitializeOnEnterPlayModeAttribute
作用于静态方法,使编辑器类方法在进入 Play Mode 时初始化
static int s_MySimpleValue = 0;
   
static void OnEnterPlaymodeInEditor(EnterPlayModeOptions options)   
{
   Debug.Log("Entering PlayMode");
   if (options.HasFlag(EnterPlayModeOptions.DisableDomainReload))
       s_MySimpleValue = 0;   
}   

[*]InitializeOnLoadAttribute
作用于静态方法(构造方法),当 Unity 加载时或脚本重编译时初始化编辑器类

[*]InitializeOnLoadMethodAttribute
作用于静态方法,Unity 加载时执行编辑器类方法

[*]LightingExplorerExtensionAttribute
作用于类,标记 Lighting Explorer 的扩展类,支持每条渲染管线一个扩展

[*]MenuItem
作用于静态方法,为主菜单和 Inspector context menu 添加选项
可添加快捷键:%(ctrl 或 command,区别于 Windows 或 MacOS)#(Shift)    &(Alt)
#LEFT (左Shift)LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN等
如:WarlGMenu/Item #&g 即 shift-alt-G      WarlGMenu/Item _g 即仅适用 G 键

static void WarlGMenuItem()   {   }

[*]PreferenceItem
已废弃

[*]SettingsProviderAttribute
作用于静态方法,注册新的 SettingProvider

[*]SettingsProviderGroupAttribute
作用于静态方法,注册多个 SettingProvider

[*]ShaderIncludePathAttribute
已废弃
UnityEditor.Callbacks


[*]OnOpenAssetAttribute
作用于静态方法,当 Unity 将要打开一个 Asset 时,该方法被调用需满足如下条件:
static bool OnOpenAsset(int instanceID, int line)
static bool OnOpenAsset(int instanceID, int line, int column)
返回 true 表明由方法处理该 Asset,返回 false 表明外部打开

[*]PostProcessBuildAttribute
作用于静态方法,构建 Player 之后被调用
   
public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
{
   Debug.Log( pathToBuiltProject );   
}

[*]PostProcessSceneAttribute
作用于静态方法,构建 Scene 或 Play Mode 调用 SceneManager.LoadScene 方法后被调用
UnityEditor.EditorTools


[*]EditorToolAttribute
将 EditorTool 注册为全局工具或一特地类型自定义编辑器
UnityEditor.Experimental.AssetImporters


[*]CollectImportedDependenciesAttribute
作用于静态方法,指定哪些方法声明对引入的 Asset 有依赖
   
public static string[] CollectImportedDependenciesForModelImporter(string assetPath)   
{
   if (assetPath.Equals(s_DependentPath))
       return new[] { s_DependencyPath };
   return null;   
}

[*]ScriptedImporterAttribute
作用于类,注册一个ScriptedImporter 的派生类为自定义 Asset Importerl   
UnityEditor.Localization.Editor


[*]LocalizationAttribute
本地化程序集
UnityEditor.Rendering


[*]ScriptableRenderPipelineExtensionAttribute
将条件应用在类查询过滤器上,过滤器类型取决于当前使用的 ScriptableRenderPipeline
UnityEditor.ShortcutManagement


[*]ClutchShortcutAttribute
将静态类注册为一个 clutch shortcut

[*]ShortcutAttribute
将静态类注册为一个 action shortcut

[*]ShortcutBaseAttribute
ShortcutAttribute 和 ClutchShortcutAttribute 的抽象基类
UnityEditor.UIElements


[*]UxmlNamespacePrefixAttribute
在程序集中为名称空间定义XML命名空间前缀   
Unity.Burst


[*]BurstDiscardAttribute
作用于方法和属性,将其从 burst 编译器编译原生代码中移除   
Unity.Collections.LowLevel.Unsafe


[*]DeallocateOnJobCompletionAttribute
官网暂无详细解释,直译任务结束析构

[*]NativeDisableParallelForRestrictionAttribute
官网暂无详细解释,直译限制并行

[*]NativeFixedLengthAttribute
容器空间固定不变

[*]ReadOnlyAttribute
标记结构体成员为只读

[*]WriteOnlyAttribute
标记结构体成员为只写
Unity.Jobs.LowLevel.Unsafe


[*]JobProducerTypeAttribute
所有 Job 接口类型都需要被 JobProducerType 标记,用于被 Burst ASM Inspector 编译为执行方法
.NET


[*]Serializable
作用于类或结构体,表名其可被序列化;注 仅非抽象、非通用自定义类可被序列化

[*]NonSerialized
声明变量不可被序列化

[*]其他暂不
页: [1]
查看完整版本: Unity手册—Attribute汇总说明