unity中的常用属性修饰符
- 一、前言
- 二、常用修饰符
- 三、结语
一、前言
在做unity开发编辑脚本的时候经常会用到属性修饰符,使开发调试更加便捷。初学者见过最多的莫过于
[Header("标题文本")]
了吧,除此之外其实还有很多,这篇文章列举说明一些开发常用属性修饰符。
二、常用修饰符
在Unity中,属性修饰符可以用于控制序列化行为、编辑器显示和其他功能。以下是一些常用的Unity属性修饰符及其含义:
-
[HideInInspector]
此属性修饰符可以隐藏一个字段或属性,使其在Inspector窗口中不可见。
-
[Range(min, max)]
限制一个数值字段或属性的可接受值范围。在Inspector中,这个字段会显示为一个滑动条或输入字段,限制在指定的最小值和最大值之间。
-
[Tooltip("提示文本")]
为Inspector中的字段或属性添加工具提示。当用户将鼠标悬停在字段上时,会显示提示文本。
-
[Multiline(n)]
将字符串字段或属性在Inspector中显示为多行文本区域。可以指定行数,例如[Multiline(3)]
将显示一个3行的文本区域。
-
[ SerializeField ]
使私有或受保护的字段在Inspector中可见和可序列化。
-
[Header("标题文本")]
在Inspector中添加一个标题,用于分隔和组织字段。
-
[Space]
在Inspector中添加一些空间,用于分隔字段,也可以[Space(50)]
分隔的更远。
-
[ContextMenuItem("菜单项文本", "方法名")]
在Inspector中的字段旁边添加一个上下文菜单项,当点击时,会调用指定方法。
-
[TextArea(3, 10)]
与[Multiline]
类似,但它还允许指定文本区域的最小和最大行数。超过最大行数,会出现滚动条,但[Multiline]
不会出现。
-
[HelpURL("URL")]
为脚本添加一个帮助链接,点击时会在浏览器中打开指定的URL。
这些属性修饰符可以在Unity编辑器中提供更好的用户体验,并帮助组织和管理脚本中的数据。
只修饰类,一般会默认跳转手册文档
-
[ContextMenu ("名称")]
在Inspector面板中脚本Script的上下文菜单中添加一条指令,当点击该指令时,执行对应函数。需要注意的是修饰符只能用于非静态函数。
-
[CreateAssetMenu(fileName = "xxxx",menuName = "xxx/xxx")]
参数说明:fileName
:生成asset文件的文件名;menuName
:在Assets/Create上子菜单的名字。
这个修饰符可以通过编辑器创建自定义资产。通常用于那些继承自ScriptableObject
的类,它可以让开发者轻松地创建和管理配置文件、数据容器或其他可序列化的资源。
-
[ColorUsage(bool, bool, float, float, float, float)]
在Unity中,[ColorUsage]
属性用于指定一个Color类型的字段如何在编辑器中显示和编辑。这个属性允许你限制颜色的编辑范围,例如,可以指定最小的亮度、饱和度或者Alpha值。这对于那些需要特定颜色范围的应用场景非常有用,比如光照颜色、材质颜色等。
第一个参数true
表示是否允许HDR(高动态范围)颜色。
第二个参数true
表示是否允许颜色选择器显示Alpha通道。
第三个参数0f
是颜色的最小亮度值。
第四个参数8f
是颜色的最大亮度值。
第五个参数0.1f
是颜色的最小饱和度值。
第六个参数3f
是颜色的最大饱和度值。 -
[AddComponentMenu("xxx/xxx")]
该属性是一个用于自定义脚本的特性,它允许你为脚本定义一个自定义的菜单路径,以便在编辑器中通过Add Component
菜单添加该组件时能够找到它。这个特性对于组织复杂的工程或者为非程序员用户提供易于理解的组件非常有用。
-
[DisallowMultipleComponent]
防止在同一GameObject上添加同一组件的多个实例。
下面是一些不是很常见的,但是也要了解知道。
-
[Delayed]
当应用于属性时,延迟更新属性值,直到用户完成输入。这通常用于那些需要用户输入但不需要即时反映的场合,比如在Inspector中输入一个值后,不需要立即看到结果,而是等到用户完成所有输入后再更新。
比如在这段脚本中,health
字段在Inspector中会有一个延迟更新的行为。当你开始在Inspector中编辑health
的值时,Unity不会立即应用这个新值,而是等到你完成输入(比如按下回车键或点击其他字段)后才会更新。
这个特性对于防止在用户输入过程中频繁触发的事件或计算非常有用。例如,如果你有一个复杂的计算依赖于health
的值,你不想在用户每输入一个数字时就执行这个计算,而是等到用户输入完整个数值后再执行。 -
[ExecuteInEditMode]
允许脚本在编辑模式下运行,而不仅仅是播放模式。 -
[FormerlySerializedAs("旧字段名")]
当字段名称更改时,用于保持序列化数据的兼容性。 -
[PropertyDrawer(typeof(MyPropertyDrawer))]
自定义字段在Inspector中的显示方式,通过指定一个实现了PropertyDrawer
类的类型。 -
[RequireComponent(typeof(ComponentType))]
自动将指定的组件添加到GameObject上,如果它尚未存在。
三、结语
虽然上面列举了不少属性修饰符,但是还有许多修饰符,只不过我们在开发的时候很少用到。我记得有个老师在教我的时候说过这样一句话:没有哪个程序员可以全部背会记住文档,只要能够找到会用就行,不要求全部背会记住。 是啊,文档手册里的东西千千万,怎么可能把全部的东西信手拈来,熟练使用查找手册也是一种能力。
今天的文章内容到此结束,下期见,拜拜!