Skip to main content

类型与属性Meta

最近更新时间:2023-11-22

在编写C++类时,按规范填写适当的类型和属性Meta,可以控制属性是否能在编辑器中编辑,与属性编辑器的交互,与序列化机制的交互(是否存盘,是否跳过序列化等)。

    DECLARE_PROPERTY (bool, LModelComponent, IfOverrideTexPaths, 
GetIfOverrideTexPaths, SetIfOverrideTexPaths, EditAnywhere,
EditorType = CheckBox, Category = Render);

DECLARE_PROPERTY(const char*, LModelComponent, OverrideTexPaths,
GetOverrideTexPaths, SetOverrideTexPaths, EditAnywhere,
EditorType = FileControl, Category = Render, FileFilter = Directory
EditCondition = IfOverrideTexPaths);

属性

MetaKeyMetaValue含义备注
EditAnywhere编辑器可读写如果没有设置这两个MetaKey,默认编辑器看不到这个属性
VisibleAnywhere编辑器只读(只读控件待实现),对象属性内部可见,容器属性表示容器本身不可修改
Category任意英文字符属性分类用“|”分割父子分类,分割前后及名称不能带空格
EditorTypeCheckBox复选框控件如果没有设置这个MetaKey,则根据属性类型来自动匹配
boolean = CheckBox
string, widestr=String
int, int64, float, double=FloatEdit
enum=ComboBox
String文本控件
FloatEdit浮点型数值控件
DegreesEdit用角度方式编辑弧度,编辑器显示角度,对象实际属性是弧度
AssetEdit资产控件(文件控件+预览图)
FileEdit文件控件
ColorEdit颜色控件
TextureEdit贴图控件
ComboBox下拉框控件
ChordControl快捷键控件
BehaviorTree行为树控件
VisibleMaskEdit可视遮罩控件
SoundFileEdit音频文件控件
CustomProperty任意英文字符自定义属性控件表示使用指定的类型构建属性节点
FilePath文件类型控件会去判定这个值,设置选择窗口的根路径如"Project"、"Computer"、"Resource"
FileFilter文件类型控件会去判定这个值,与枚举文件类型对应详见FileFilterMap表
ValueList下拉框控件会去获取这个值,可以是任意数字或英文字符,“|”为保留字符表示下拉菜单中的每一项值与值之间用“|”进行分割
ValueListMethod下拉框控件会去获取这个值,可以是任意数字或英文字符如果没有ValueList,会找ValueListMethod,通过调用method定义的函数,获取下拉菜单项
AdvancedDisplay属性控件显示在进阶分类中
Decimals小数精度,可以是任意非负整数
ClampMin允许设置的最小值
ClampMax允许设置的最大值
EditorGroup编辑控件分组任意字符
EditorGroupIndex编辑控件分组索引从0开始的索引
RelevantProperty关联的属性设置这个Meta以后,本属性修改时,会自动更新关联属性的控件(重建关联控件)用“|”分割多个属性
ReplicatedName任意英文字符,“|”为保留字符服务器对应属性名称
OnReplicated任意英文字符,“|”为保留字符属性值变化回调函数
SubclassOf任意英文字符,“|”为保留字符属性值所属的LClass类
ShowOnlyInnerProperties将对象属性对应的控件显示到其父类中
InitialEdit初始化可编辑,只在特点页面才显示的属性,与实体Meta HasInitialEdit对应
Config配置类型属性,只在特点页面才显示的属性,与实体Meta Config对应
SkipSerialization跳过序列化
Transient跳过存盘
DuplicateTransient跳过复制
NonPIEDuplicateTransient跳过非PIE的复制
VisibleCondition显示条件条件属性值满足表达式时,本属性才显示
EditCondition编辑条件条件属性值满足表达式时,本属性才能编辑
Order整型数值属性排序优先级,数值越大排序优先级越高
KindOfActor字符串,应该对应一个LActor的子类的类名罗列关卡中所有类型是KindOfActor标注的Actor到一个ComboBox中,供用户选择属性类型必须是PERSISTID
Loop属性值在最大最小值之间循环
HintText字符串属性控件提示用的,文本信息
KindOfComponent字符串,格式:KindOfComponent = "LVoxelTerrainActor.
LPlanetAtmosphereComponent"
范例的意思是:罗列关卡中类型是LVoxelTerrainActor的Actor下的LPlanetAtmosphereComponent组件到一个ComboBox中,供用户选择属性类型必须是PERSISTID
NetProperty网络同步属性标记后,属性会被网络服务器同步
NetPropertyAll网络同步所有属性标记后,对象的所有属性都会被网络服务器同步
NetPropertyCondition网络同步条件网络同步条件分为Private和Public两种条件模式。Public为默认条件,会同步到所有客户端,Private则将只会同步到主控玩家的客户端
NetPropertyNotify网络同步属性通知客户端属性同步后,会触发指定的通知函数
StoreProperty网络存盘属性标记后,属性会被服务器执行存盘。目前只限玩家对象

注意:用“|”分割字符串时,“|”前后不能有空格。

实体

MetaKeyMetaValue含义备注
EditorVisible编辑器是否可见如果没有设置这个MetaKey,默认编辑器看不到这个实体
Category任意英文字符,"|"为保留字符属性分类,\"|"分割子分类(待实现)
OnlyShowSelf只显示自身属性只显示自身的属性,不显示从父类继承的属性
TruncateParentProperty从此截断父级属性在收集属性时遇到此标记的对象时不再中断其父类的属性
Prefabable是否预制件基类如果没有设置这个MetaKey,编辑器创建预制件选取基类时看不到这个类型
DisableMarqueeSelect是否允许框选如果设置了这个MetaKey,则编辑器框选时忽略这种类型的对象
HideProperty,HideCategory字符串本类需要隐藏的属性和分类(建议:引擎开发人员使用,项目开发使用隐藏配置文件实现)
TranslationVisible译文是否可见如果没有设置这个MetaKey,编辑器不能编辑这个实体的译文
ServerClass服务器类声明的GameObject类,与服务器上的类对应仅在非组件服务器中使用