【ue源码】定制-蓝图部分
今天在更新UE的伤害系统的时候出现了一个问题:
多个地方频繁调用一个函数,而这个函数肯定做优化,具体就是,把对应数据放入到队列,另外一个地方慢慢消费这个队列,
那么问题出现了,我使用的UE只有Single,TArray,TMap以及TSet这几个容器,如果使用队列,
那么问题来了,我如何弄出一个我需要的队列?我找了下面2种方法
1.我需要自己新建一个几点,作为Node,然后在写一个BP_QueueLibrary,就形成了队列,可以操作队列对象
2.深入了解蓝图源码,给UE原生自带的这几个容器中继续扩充容器,这个方式很有挑战性,问题解决更彻底,因为第一种方法,写的Node注定是一个不能支持模板类型(不同于c++),每次获取值需要强制类型转换
而这种方式使得以后会更简单一些
通过查找网上的资料,终于找到了切入点:
1.b站的人宅 蓝图编译原理,这个只对UE的蓝图编译系统流程做了一些说明但是无法了解具体
2.https://zhuanlan.zhihu.com/p/393603858?utm_id=0 这里有了关键入口点FNaitiveFunctionRegistrar,这个是对于函数的注册,从文章中我们看到,我们写的c++,第一次是编译成了中间c++,然后成为正常的c++编译
这就使得我找到了蓝图的模块,其实就在Core中,这里我查找到了UnrealType.h的头文件,他包含了蓝图中最基本的类型的定义,甚至有可能是注册,
这里找到了关键线索FScriptSetHelper,FMapProperty 等类,这些类总共的类型对应上面的类型,也就是说我只用改下代码,新建一些对应的类型那么即可在蓝图中扩展,当然还需要看下这些类实现好之后,如何与他们蓝图交互,
注册到蓝图中