属性偏移
思考
如果能计算一个属性成员的偏移, 记录该偏移后, 根据指针指向位置, 偏移后可得该属性. 然后可以直接对该属性进行操作.
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的时候, 就已经知道其偏移位置了.