Skip to content

1.规则编写

一、命名检查

资源的命名检查会先执行Global的命名检查,再执行自身的命名检查。

例:StaticMesh 'S_aaa' 会先执行Global的检查(是否包含中文,特殊符号),再执行StaticMesh的检查(是否为S_开头)

参考这个用例可以设计适合自己项目组的命名检查方案。

默认认为所有的资源都需要进行命名检查,所以CheckName并不是一个单独的IRule的子类,而是IObjectRules的一个固有函数。

image-20220512114644286

所有的方法集合通过Override CheckName方法,就可以实现命名检查的功能,不实现或者不需要的话则可以直接return true.(命名检查通过)。

例:对应类为UBlueprint,命名为BP_开头,命名检查声明在BlueprintRules.h文件,函数实现见下。

image-20220512114706082

有些通用的命名检查,则可以通过GlobalRules::CheckName里去实现。

比如命名中不可以包含中文,特殊符号,这种通用的需求。

目前已经有一些缺省的命名设置,如不符合项目情况可自行修改。

二、新增规则编写(C++)

参考示例规则,可以看到大概的规则内容是怎么个样式了,那么如何让这条规则生效并且正确运转在我们的检查中呢?

还是以前面“Blueprint内的StaticMeshComponent的 StaticMesh判空”的规则为例。

声明

首先我们声明这个规则,声明的位置则是你想要生效的资源,上述为Blueprint

image-20220512113240793

声明一个构造函数,以及一个RuleCheck函数。

构造函数

构造函数需要写上RuleName,用于接收Artease传来的规则名,实现在Artease上控制规则的开关。

bActiveStatus为规则的默认激活状态,通常认为是false。

image-20220512113431050

RuleCheck函数

这个函数在示例规则贴过就不贴了,需要注意3个变量

Object,传入的待检查资源

InOutLog,输出的Log,有新增的Log提示需要返回直接InOutLog += (规则内容) 即可。

bPass,检查结果。也可以直接return true/false。

添加到规则集合

将规则类添加到对应位置,那么每次运行就会根据Artease的规则开关情况去顺利执行了。

image-20220512113505491

三、新增规则编写(Python)

Python规则编写不同于C++,优点是可以实时生效,不需要去修改DLL文件,所以非常推荐这么写。

Python规则的编写完全放在Artease上,分别支持Unreal原生Python跟UnrealEnginePython,下文以原生Python为实例。

如何新建Python规则

image-20220512113641296

编写规则内容

image-20220512113721733

bPass为检查结果

OutputLog为输出的Log

Asset为待检查资源

上述规则内容为,当一个StaticMesh资源的LOD数量小于1时,则检查不通过。

保存这样的资源则会提示

image-20220512113751952

image-20220512113814274

四、示例规则

目前已经实现了一些规则,方便用户参考。下文对BlueprintRules的一条规则做展开,其他只做大概介绍。

BlueprintRules.

对应类为UBlueprint,命名为BP_开头。

目前支持对Blueprint内的StaticMeshComponent的 StaticMesh判空 跟 DrawDistance是否设置 的检查,实现见下图。

image-20220512112432840

最终Return bPass为检查结果(true为通过,false为失败)

InOutLog为检查提示,用于保存到本地以及弹窗提示。

当上述规则生效时,我在蓝图内添加不符合规则的StaticMeshComponent,则会有“静态Mesh为空”的提示。

image-20220512112515260

同时本地会保存如下图Log。

image-20220512112548087

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)

以上为支持的所有类别。