一、反射的宏标记
在编写UE4 C++代码时,我们经常使用UCLASS()、USTRUCT()、UENUM()、UFUNCTION()、UPROPERTY()等宏去标记我们的类和成员变量,只有添加这些宏的类或成员才能将其添加到反射系统。这样,基于UE4反射的GC系统等可以管理我们的反射数据。举例而言,当一个继承UObject的类对象指针被声明时,如果不使用UPROPERTY将其标记,则GC不能察觉到它的存在,也就不能对其进行管理。当GC认为没有其它对象包含该对象的指针引用时,将对其回收,那么此成员变量将会成为野指针,这个操作是有风险的。所以,我们应该主动用UPROPERTY标记,由UE4的GC帮我们管理该成员指针。或者使用AddToRoot方法,防止GC。
在宏标记中,我们可以选择性的添加标识符,以决定被反射数据可以在哪里使用、如何被使用。有选择性添加标识符,可以减少不必要的反射数据,这样做可以节省元数据所占用的内存。
二、反射数据
被反射的类或变量等数据将会被保存在元数据当中。也就是说通过元数据对象,我们可以获取到被反射类或成员的所有数据,比如类名、继承关系、包含的成员变量、类型信息等。元数据类的继承关系如下:


本文深入探讨了UE4中的反射系统,包括宏标记的作用、反射数据的存储方式以及如何通过元数据获取类、结构体、函数和枚举的反射信息。同时,介绍了UBT和UHT在编译和代码生成中的角色。
最低0.47元/天 解锁文章
7805

被折叠的 条评论
为什么被折叠?



