ue4游戏中的所有对象名称都保存在GName中,4.23版本以下的GName解析与高版本的不同。
4.23版本以下可以通过'FName::GNames()'获取到GName
指针,对应的GName指针就是static TNameEntryArray* Names
,利用ue4Dumper
时输入的GName
就是这个静态指针变量。
'TNameEntryArray'类型是通过类模板'TStaticIndirectArrayThreadSafeRead'定义的,实际TNameEntryArray就相当于一个二维数组:FNameEntry* [2 * 1024 * 1024][0x4000]
对TNameEntryArray
类型进行简化后如下图所示。
其中类模板TStaticIndirectArrayThreadSafeRead
中定义了重载运算符[]
完成元素的索引
那么名称的索引保存在何处呢,看一下FName::GetComparisonNameEntry()
函数,其通过调用GetComparisonIndex()
函数获取FName
的成员变量ComparisonIndex
,这个就是名称的索引。