这篇文章总结了UE5一些很少在代码中能看见的meta标识符,但这些meta标识符在某些情况下又很有实际作用。后续如果在代码中发现有使用了一些稀有的标识符,也会陆续添加进来。
若要了解meta的常见用法,可以参见虚幻官方文档虚幻引擎元数据说明符 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com)
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/metadata-specifiers-in-unreal-engine?application_version=5.5
元数据说明符
1、meta 函数参数默认值
格式:meta = (参数名 = “默认值”)
可直接在meta中用参数名来给默认值。当我们在蓝图中调用到这个函数时,会显示为该节点设定的默认值,这样做的好处是默认值不会受限于C++必须写在末尾的规定,这种方式可以随意的指定中间的某个参数的默认值。
如下例中,我们给函数 " MyFuncTestParam_DefaultVector " 添加了一个 " FVector Location " 的输入参数,然后在 UFUNCTION 中,我们可以通过 meta = (参数名 = “默认值”)这种写法,将这个参数直接指定为(4,5,6),那么当我们在蓝图中调用该节点时,就会出现这个默认值。
2、EditCondition 表达式
格式:meta = (EditCondition = "运算表达式“)
通过某变量的表达式可以控制对EditCondition里面的其他单个或多个属性进行展示屏蔽,这样做可以更好的达到屏蔽一个模块功能的所有属性,避免过多属性的干扰。
比如下面例子中,只有当两个变量 MyFirstInt + MySecondInt == 500 时(满足运算表达式的条件为true),UE编辑器属性面板上显示的参数 MyInt_EditConditionExpression 才会被激活,此时才可修改其值,而对应下面那个参数 MyInt_EditConditionExpression_Not 则会被屏蔽,无法修改值。
扩展:在UE引擎里面有的FEditConditionParser来解析表达式,关于这种在字符串里面填写多个属性,然后进行运算的功能,如果有类似的需求,也可以参考它来复用。
3、bShowOnlyWhenTrue 配置某些属性显示、隐藏
格式:meta = (bShowOnlyWhenTrue = "配置名”)
可以允许我们在编辑器的配置文件中控制单个属性的显示和隐藏,如果你想在团队内为某些人单独开关某些属性设置,则可以使用此方式实现配置。
4、TitleProperty 结构数组元素标题
格式:Category = 自定义分类名称, meta = (TitleProperty = "{标题}[{文本}]" )
在使用结构作为数组元素时,可通过自定义的格式来美化分组显示的标题。
在下图例子中,第一种:MyStructArray_NoTitleProperty 未使用 TitleProperty ,其下的所有数组均显示的数组标题为“3members”;第二种:这个 MyStructArray_HasTitleProperty 有使用了 TitleProperty 的修饰,其通过变量 MyString 与 MyInt 进行属性拼接来美化数组标题,当数组条目被折叠时,该属性拼接文本即为标题,这样区别与第一种情况,第二种显示更加直观易懂。
更多关于 TitleProperty 的参考例子如下:
5、CommutativeAssociativeBinaryOperator 二元运算符
格式:meta = ( CommutativeAssociativeBinaryOperator )
在蓝图节点中,我们经常可见有一个“Add pin” 的加号(如蓝图加法节点左侧),点击后能动态添加多个参数,我们用这个运算符也可实现这一点,这玩意儿能让一个二元运算符函数无限嵌套,在调用时与所有添加的参数一起运算最终返回运算结果。
它的作用机制是前面两个参数先计算,然后将计算结果作为新的参数再继续跟下一个参数进行运算,以此类推,((A+B)+C)+D...
更多用法还有下面这些
6、Variadic 多输入多输出
格式:meta = (Variadic))
可以在函数上自由的配置多个输入多个输出,并且类型也可以根据引脚连接的类型来决定,当然为了正确实现配套的逻辑,在使用该蓝图节点时,要在CustomThunk的函数里根据反射来实现。这个功能在源码里面其实是用来运行Python脚本的,但这个功能我们自己也可用搬过来用,
如下例,我们定义了一个函数 PrintVariadicFields , 在蓝图调用该节点后,可以在右侧细节面板中通过点击加号,自由的添加输入参数和输出参数,这里我们添加了两个输入参数,Location和Size,其中的参数Location我们通过与一个Vector向量连接后,实现了对应向量类型,而参数Size则实现了其他对应引脚连接的类型,输出参数亦是如此。
7、SparseClassDataType 多Actor持有共同值
格式:SparseClassDataType = 参数名
假如场景里有某种Actor的很多实例,这些实例都有这个属性值,并且这个值都是一样的,那么可以用这种方式把不变的数据只保存一份,通过这种方式可以优化内存占用。当然实现这种优化效果的方式有很多种,但上面所说的这种方式有它良好的编辑器的支持。