UE3之UClass
UE3并不是真的支持反射, UE3支持的仅仅是通过宏来生成的运行时类型检测.
在UE3中, UObject是UE3中最底层的基类, 所有要与脚本交互的类, 以及需要序列化的类都要继承它而来. UClass也是UObject的子类. UObject的功能包括 : 对象的实例化, 对象的序列化以及反序列化, 脚本的解析与执行, 垃圾回收.
UE3中C++代码与Unreal Script代码共存, 对于所有的Unreal Script都有对应的UClass与之对应. 脚本是通过对UClass中的字节码进行解释并挨个调用对应C++的代码来执行的. 在UObject中所有exec打头的函数都是用于与脚本交互的, 其功能包括脚本字节码的语法解释和操作(if, +, -等), 脚本内置函数等. UObject本身作为Unreal Scipt的Virtual Machine来解释执行UC脚本字节码.
在UE3中UClass有两层含义,
1. 对应Unreal Script中的类型, 所有UC脚本都会有对应的UClass对象, 这个UClass包含了此类型的信息, 如函数, 变量, 状态等信息, 以及UC最终编译后的字节码.这个对象作为Static Class被所有实例化(Native Class)的对象所共享. 在构造具体类型Class的实例化对象时, 类型通过XXX::StaticClass来获取.
2. 用于运行时类型检测, 代表实例对象的类型, 这项功能可用于脚本导出类以及C++端类共同使用.
关于Unreal Script的实现以及执行过程详细文档可参阅
https://udn.epicgames.com/Three/UnrealScriptImplementation
https://udn.epicgames.com/Three/UnrealScriptCompileProcess
https://udn.epicgames.com/Three/UnrealScriptExecution
https://udn.epicgames.com/Three/UnrealScriptByteCode