UE5中罕见的 ( 标识符, meta=( . . . ) )

        这篇文章总结了UE5一些很少在代码中能看见的meta标识符,但这些meta标识符在某些情况下又很有实际作用。后续如果在代码中发现有使用了一些稀有的标识符,也会陆续添加进来。

        若要了解meta的常见用法,可以参见虚幻官方文档虚幻引擎元数据说明符 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com)icon-default.png?t=O83Ahttps://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的很多实例,这些实例都有这个属性值,并且这个值都是一样的,那么可以用这种方式把不变的数据只保存一份,通过这种方式可以优化内存占用。当然实现这种优化效果的方式有很多种,但上面所说的这种方式有它良好的编辑器的支持。

### 如何在 Unreal Engine 5 中使用 C++ 读取 .m 文件 为了实现在Unreal Engine 5 (UE5)中通过C++读取.m文件的功能,可以借鉴处理其他类型文件的经验以及网络请求的方式。然而,直接针对.m文件(通常指MATLAB脚本或函数文件)的操作并不是常见的需求,在游戏引擎环境中尤其少见。因此,解决方案可能涉及将.m文件的内容转换成适合UE5处理的形式。 #### 方法一:作为纯文本加载并解析 如果目标仅仅是获取.m文件中的内容而不执行其中的代码,则可以通过标准的文件I/O操作来完成这一任务。这涉及到创建一个自定义类用于打开、读取指定路径下的.m文件,并将其内容存储为字符串形式以便后续分析或展示[^1]。 ```cpp FString LoadMFileContent(const FString& FilePath) { FString FileContent; FFileHelper::LoadFileToString(FileContent, *FilePath); return FileContent; } ``` 此方法简单有效,适用于只需要显示源码的情况;但对于更复杂的交互逻辑则显得力不从心。 #### 方法二:利用HTTP GET 请求远程服务器上的.mat/.m 数据 当.m文件位于外部Web服务上时,可采用HTTP客户端库发起GET请求下载所需资源。这种方法特别有用,尤其是在跨平台项目或是需要动态更新资产的情况下。需要注意的是,实际应用中应当考虑安全性因素,比如验证SSL证书等措施[^2]。 ```cpp TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->OnProcessRequestComplete().BindLambda( [](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) { if(bWasSuccessful && Response.IsValid()) { // Process the response content here. UE_LOG(LogTemp, Log, TEXT("Response Content: %s"), *Response->GetContentAsString()); } }); HttpRequest->SetURL(TEXT("http://example.com/path/to/file.m")); HttpRequest->SetVerb("GET"); HttpRequest->ProcessRequest(); ``` 以上两种方式均能实现基本功能,但具体选择取决于项目的特定需求和技术栈偏好。对于大多数情况而言,第一种方案更为直观易懂且易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值