问问题记录: 打断点走一下流程看看各个事件是怎么发生的, 一些细节的具体实现没必要看
UE4 反射
反射:运行时自检、 蓝图和代码的同步,GC都依赖于反射
UBT:UnrealBuildTool C#类型,编译由其处理,Target,Build是为其服务的。 扫描头文件,记录每一个包含UCLASS,USTRUCT等等具有反射功能的模块,若上面的带有反射的头文件发生了变化则调用UHT。 UHT:UnrealHeaderTool C++,代码解析生成工具,宏和include,generated.h信息都辅助其生成相应的C++反射代码。 分析头文件,创建一系列反射数据,并生成包含反射数据的C++代码以及帮助函数和thunk函数 UBT和UHT合作实现反射。
代码编译的两个阶段:
- UHT被调用,解析C++headeer中引擎相关的部分,并生成自己的代码,生成UObject等基础的部分。
- 完成上一步后才对结果用普通编译器编译。
generated.h里面是宏,一个很大的宏把所有和反射相关的方法和结构体连接到一起。 generated.cpp中是函数定义,UHT根据用到的宏生成改文件
看GAS流程
用rider debug但是不好使,试了攻击必被调用的PreAttributeChange也不能正常走到断点停止 先用我自己的项目泡一下试试,排除样例项目因为什么神秘原因不会调用PAC,但是我并没修改什么内容他却要重新build一下。。
找到正确的debug方式了,但是rider debug的话总要进入汇编代码,不论DebugGame还是Developer模式都是一样, 用回visual studio 但是符号常量没有,有去重新安装,安装提示空间不够,发现电脑有两个VS2019就删除了第一个结果把当前用的删除了,用另外一个debug但另外一个没有UE4的运行组件,于是去下组件,下完组件debug十分钟进程未响应了。崩溃了。
- CharaterBase构造函数:显式实例化ASC和AttributeSet,默认level为1
- LoadInvetory
- PossedBy
- AddStartUpGameplayAbilities------CahraterBase
- PreAttributeChange调用
AdjustAttributeForMaxChange:
重新装好编译一直在加载符号,今天估计就这样了。 明天一定好好学习不摸鱼
|