从Serializable派生的类可以通过定义属性将其自动序列化为二进制或XML格式。属性存储到每个类的上下文中。场景加载/保存和网络复制都是通过从Serializable派生Node和Component类来实现的。
支持的属性类型是Variant支持的所有属性类型,不包括指针和自定义值。
属性可以引用对象的成员,也可以定义setter和getter函数。成员属性也可以具有后置操作:不带参数的成员函数,每次将值分配给属性时都会调用该函数。
还支持从零开始的枚举,以便枚举值可以作为文本存储到XML文件中,而不仅仅是数字。
以下宏可用于定义属性:
- URHO3D_ATTRIBUTE:对象的成员。应可转换为指定类型。
- URHO3D_ATTRIBUTE_EX:对象的成员。设置属性时调用后期设置成员函数回调。
- URHO3D_ACCESSOR_ATTRIBUTE:Getter和setter成员函数。指定类型的属性值被传递给setter,并期望从getter返回。
- URHO3D_CUSTOM_ATTRIBUTE:直接使用Variant值的Getter和setter函数对象。请参见MakeVariantAttributeAccessor()
- URHO3D_ENUM_ATTRIBUTE:具有人类可读名称的32位基于零的整数枚举。
- URHO3D_ENUM_ATTRIBUTE_EX:与URHO3D_ATTRIBOTE_EX相同,用于枚举。
- URHO3D_ENUM_ACCESSOR_ATTRIBUTE:与URHO3D_ACCESSO_ATTRIBUTE相同,用于枚举。
- URHO3D_CUSTOM_ENUM_ATTRIBUTE:与URHO3D-CUSTOM_ATTRIBOTE相同,用于枚举。
要实现对属性的副作用,可以重写Serializable中的默认属性访问函数。请参见OnSetAttribute()和OnGetAttribute()。
每个属性可以具有以下标志的组合:
- AM_FILE:用于文件序列化(加载/保存。)
- AM_NET:用于网络复制。
- AM_LATESTDATA:经常更改网络复制的数据,只有最新的值才重要。用于运动和动画。
- AM_NOEDIT:是一个内部属性,不显示用于编辑。
- AM_NODEID:是一个节点ID,在实例化场景内容时可能需要重写。
- AM_COMPONENTID:是一个组件ID,在实例化场景内容时可能需要重写。
默认标志为AM_FILE和AM_NET。请注意,定义AM_FILE或AM_NET都是合法的,这意味着属性只有运行时意义(可能用于编辑)
有关使用URHO3D_ATTRIBUTE族助手宏注册属性的示例,请参见现有引擎类(例如,在Scene或Graphics子目录中)