❶ UE4基础知识总结(四)
六、自动测试技术
1.自动测试分为简单测试和复杂测试,简单测试用来描述单个原子测试,复杂测试用来运行基于多个输入的相同代码。
2.简单测试可用来确认特定功能如预期般可操作。一般都是单元测试或功能测试。
3.复杂测试可被用来对一系列物品迭代并对每个物品运行相同的功能。一般就是内容压力测试。例如载入所有地图或编译所有蓝本。
4.当前的规则是将所有的自动测试放置到相关模块内的PrivateTests目录。测试文件命名为[ClassFilename]Test.cpp
5.这些测试通过应用RunTest()函数来单独定义其功能,而且Parameters字符串将保持为空字符串。
IMPLEMENT_SIMPLE_AUTOMATION_TEST( TClass, PrettyName, TFlags )
IMPLEMENT_COMPLEX_AUTOMATION_TEST( TClass, PrettyName, TFlags )
七、编码规范
1.编码规范对于程序员来说非常重要,原因如下:
a.一套软件80%的生命周期都是维护。
b.在软件的整个生命周期中,几乎不可能一直是软件的原始作者来对其进行维护。
c.编码规范可以改进软件的可读性,从而使得工程师可以快速并透彻地理解新的代码。
d.如果我们决定将源代码公布到 MOD 开发者社区,那么我们想让它通俗易懂。
e.大部分编码规范实际上是交叉编译器兼容性所要求的。
2.变量、方法及类的名称应该清晰、明确且具有描述性。
3.注释应该是辅助加强代码的,代码是功能实现,注释表明了代码的目的。
八、对象
1.虚幻引擎中的对象基础类为UObject。UCLASS宏可用于标记从UObject派生的类,使UObject处理系统识别到它们。
2.UCLASS宏为UObject提供一个对UCLASS的引用,描述其基于虚幻引擎的类型。
3.每个UCLASS保留一个称作“类默认对象(Class Default Object)”的对象,简称CDO。
4.新建UObject示例的函数有:
a.NewObject () 创建一个自动生成命名的新实例。在简单情况下使用最佳。
b.NewNamedObject () 使用特定命名以及其他几项任选参数创建一个新实例。将判断新实例的Outer中是否存在命名冲突。
c.ConstructObject () 创建一个提供所有可用创建选项的新实例。仅限需要灵活性时使用。
d.new 用于在特定低层情况下构建对象,如构建函数需要参数时。
5.UObjects提供的功能有:
a.垃圾回收:虚幻引擎实现了一个垃圾回收方案,定期清理不再被引用或被显式标记为待销毁的 UObject。
b.引用更新:对象被垃圾回收清理时,对它的UPROPERTY引用将自动被更新为 NULL。
c.映象
d.序列化:当一个 UObject 被序列化时,所有 UProperty 数值将被自动书写或读取。
e.默认属性变化自动更新:UClass 的CDO发生变化时,引擎将尝试把这些变化智能应用到类的所有实例上(在它们被加载时)。
f.自动属性初始化:初始化时,在构建函数被调用之前,UObject 将被自动清零。
g.自动编辑器整合:编辑器理解 UObjects 和 UProperties,还可将这些数值自动公开进行编辑,而无需编写特殊代码。
h.运行时类型信息可用:UObject 明确其为何种 UClass,运行时可作出类型相关的决定。
i.网络复制:UObject 系统包括一个稳定的功能集,实现网络通讯和多人 游戏 。
6.UObjects的头文件格式:
#include 'Object.h'
#include 'MyObject.generated.h'
UCLASS() //UCLASS 宏使虚幻引擎 4 能识别 UMyObject。
class MYPROJECT_API UMyObject : public UObject //如 MyProject 希望将 UMyObject 类公开到其他模块,则需要指定 MYPROJECT_API。
{
GENERATED_BODY() //对类进行设置,以支持引擎要求的基础结构。
};