1.规则编写
一、命名检查
资源的命名检查会先执行Global的命名检查,再执行自身的命名检查。
例:StaticMesh 'S_aaa' 会先执行Global的检查(是否包含中文,特殊符号),再执行StaticMesh的检查(是否为S_开头)
参考这个用例可以设计适合自己项目组的命名检查方案。
默认认为所有的资源都需要进行命名检查,所以CheckName并不是一个单独的IRule的子类,而是IObjectRules的一个固有函数。
所有的方法集合通过Override CheckName方法,就可以实现命名检查的功能,不实现或者不需要的话则可以直接return true.(命名检查通过)。
例:对应类为UBlueprint,命名为BP_开头,命名检查声明在BlueprintRules.h文件,函数实现见下。
有些通用的命名检查,则可以通过GlobalRules::CheckName里去实现。
比如命名中不可以包含中文,特殊符号,这种通用的需求。
目前已经有一些缺省的命名设置,如不符合项目情况可自行修改。
二、新增规则编写(C++)
参考示例规则,可以看到大概的规则内容是怎么个样式了,那么如何让这条规则生效并且正确运转在我们的检查中呢?
还是以前面“Blueprint内的StaticMeshComponent的 StaticMesh判空”的规则为例。
声明
首先我们声明这个规则,声明的位置则是你想要生效的资源,上述为Blueprint
声明一个构造函数,以及一个RuleCheck函数。
构造函数
构造函数需要写上RuleName,用于接收Artease传来的规则名,实现在Artease上控制规则的开关。
bActiveStatus为规则的默认激活状态,通常认为是false。
RuleCheck函数
这个函数在示例规则贴过就不贴了,需要注意3个变量
Object,传入的待检查资源
InOutLog,输出的Log,有新增的Log提示需要返回直接InOutLog += (规则内容) 即可。
bPass,检查结果。也可以直接return true/false。
添加到规则集合
将规则类添加到对应位置,那么每次运行就会根据Artease的规则开关情况去顺利执行了。
三、新增规则编写(Python)
Python规则编写不同于C++,优点是可以实时生效,不需要去修改DLL文件,所以非常推荐这么写。
Python规则的编写完全放在Artease上,分别支持Unreal原生Python跟UnrealEnginePython,下文以原生Python为实例。
如何新建Python规则
编写规则内容
bPass为检查结果
OutputLog为输出的Log
Asset为待检查资源
上述规则内容为,当一个StaticMesh资源的LOD数量小于1时,则检查不通过。
保存这样的资源则会提示
四、示例规则
目前已经实现了一些规则,方便用户参考。下文对BlueprintRules的一条规则做展开,其他只做大概介绍。
BlueprintRules.
对应类为UBlueprint,命名为BP_开头。
目前支持对Blueprint内的StaticMeshComponent的 StaticMesh判空 跟 DrawDistance是否设置 的检查,实现见下图。
最终Return bPass为检查结果(true为通过,false为失败)
InOutLog为检查提示,用于保存到本地以及弹窗提示。
当上述规则生效时,我在蓝图内添加不符合规则的StaticMeshComponent,则会有“静态Mesh为空”的提示。
同时本地会保存如下图Log。
FoliageTypeRules
对应类为UFoliageType,无命名要求
目前支持对CullDistance是否设置的检查。
LandscapeGrassRules
对应类为ULandscapeGrassType,无命名要求
目前支持对CullDistance是否设置的检查。
MaterialRules
对应类为UMaterial,M开头。UMaterialInstance,MI开头。UPhysicalMaterial,PM开头。
目前支持UMaterialInterface(UMaterial和UMaterialInstance的父类)引用贴图为空检查,跟UMaterial的路径检查。
ParticleSystemRules
对应类为UParticleSystem,P_开头。
目前支持对LOD0的粒子数做检查,缺省上限为200。
SkeletalMeshRules
对应类为USkeletalMesh,SK_开头。
目前支持对SK的面数/顶点数逐级递减情况,ScreenSize逐级递减情况,引用Default材质/材质为空/材质重复做检查。
StaticMeshRules
对应类为UStaticMesh,S_开头。
目前支持对StaticMesh的面数/顶点数逐级递减情况,UV通道数量,引用Default材质/材质为空/材质重复做检查。
WorldRules
对应类为UWorld(也就是一个Map文件),Map_开头。
目前支持对World的StaticMeshComponent和HISMComponent的DrawDistance检查(未检查ISM Component,可自行实现),注意这里是跳过BP的检查的,因为BP的DrawDistance一般会在BP资源里设置,拖到场景里会Override,有需求可以自行修改。
LevelBounds大小检查(缺省为33000,长宽为330米的正方形)。WorldSettings里的Lightmap大小检查(缺省为2048)
以上为支持的所有类别。