静态、动态和扩展属性

Maya 中存在三种类型的属性:静态、动态和扩展。

静态属性内置在代码中或者是插件节点的成员,且无法修改或移除。

动态属性可用于在特定节点上添加或删除属性。动态属性与静态属性不同,只与节点类型的特定实例相关。

扩展属性可用于在运行时在给定类型的所有节点上添加或删除属性。例如,可以将属性添加到变换类型而不是变换实例中。变换类型的所有节点(当前存在的或将要创建的)将包含扩展属性,直到删除扩展属性为止。

注: 为 DAG 对象添加扩展属性的同时会将该属性添加到对象继承的所有节点类型中。换言之,变换和形状节点(包括所有类型的形状:网格、NURBS 和细分曲面)都将具有扩展属性。

有关每个节点的父对象,请参见“节点”参考文档。例如,surfaceShapemesh 的父对象;因此,存在于 surfaceShape 中的所有属性(包括静态属性和扩展属性)也将存在于 mesh 中。

添加和删除扩展属性

可以使用 addExtension 命令添加扩展属性。在 MDGModifier 中可找到该命令的 API 等效命令。

addExtension 命令与 addAttr 命令具有相同的参数,但有一个例外情况。使用 addAttr 命令时,必须为即将添加动态属性的节点指定名称。但是,使用 addExtension 命令时,可以使用 -nodeType 标志为即将添加扩展属性的节点指定类型。

使用 deleteExtension 命令删除扩展属性。在 MDGModifier 中可找到该命令的 API 等效命令。

序列化

从 Maya 2015 开始,没有扩展属性的显式序列化。换言之,没有将 addExtension 命令添加到 Maya ASCII 文件中,也没有将二进制等效添加到 Maya 二进制文件中。

插件创建的扩展属性依赖于使用这些属性的文件(包括所有被引用文件)中的插件要求。如果插件加载失败或无法添加扩展属性,属性将不可用,而且文件可能会缺少这些信息。

同样,通过脚本或用户命令创建的任何扩展属性在文件中也都没有关于这些属性定义的任何信息,只有这些属性的连接和值集。以这种方式保存的扩展属性值,将依靠用户来运行任何使用这些属性值的文件加载之前最初创建这些属性的同一脚本。这是一种很好的编码方法,可以确认在再次添加扩展前并不存在相同的扩展;这样,每次都将成功完成安装脚本的多次运行。