属性偏移
思考
如果能计算一个属性成员的偏移, 记录该偏移后, 根据指针指向位置, 偏移后可得该属性. 然后可以直接对该属性进行操作.
1 |
|
UE方式
UE为什么可以通过指针和FProperty直接定位该属性?
思考上文中的方法, 确实可以.

注册UClass, 调用堆栈:

UHT在*.gen.cpp中生成IMPLEMENT_CLASS

查找IMPLEMENT_CLASS的定义可以看到这里会输入其大小.



最终会设置到UStruct.PropertiesSize上.

以AHUD为例:
在生成UClass时候, 会调用Z_Construct_UClass_AHUD

并且根据Params.PropertyArray构建所有FProperty.

即,
在HUD.gen.cpp中查找Z_Construct_UClass_AHUD_Statics::PropPointers的来源.


属性偏移
所以, 在创建FProperty的时候, 就已经知道其偏移位置了.


