虚幻引擎的蓝图是一种基于节点的可视化脚本编程系统,对它的扩展也就主要是生成新的功能节点了。目前在工作中要到的蓝图扩展方式主要有以下几种:
- 蓝图宏(Blueprint Macros)可以把一系列节点组成的操作包装成一个节点;
- 使用C++编写蓝图可调用的UFunction,则蓝图编辑器会自动生成对应的蓝图节点,这是最常用的一种方式;
- 通过派生蓝图节点的基类:class UK2Node,可以灵活的定制节点的各种行为,典型的是“动态添加/删除针脚(pin)”的需求。这个派生类对应的功能逻辑主要通过重载父类的两个行为接口来实现:Expand Node和Node Handling Functor。
这个专栏主要是谈C++编程的扩展方式,所处蓝图宏就不谈了,官方的文档说的比较清楚,也很易用。一般性的UFunction扩展方式,官方文档也比较详细,也就不赘述了。
这个专栏主要讲2,3中的内容,特别是官方没什么文档的那些功能如何实现。具体的内容规划如下(以下文章建议按顺序阅读):
- 通过实现一个派生类,轻松完成异步操作的蓝图节点封装:
- 通过自定义Thunk函数实现指出“通配符”参数的“UFunction模板函数”节点:
- 详细讲解“通过派生class UK2Node”创建自定义蓝图节点的步骤:
- 实现蓝图节点的动态添加/删除Pin:
- 通过派生FNodeHandlingFunctor 实现自定义class UK2Node派生类自定义蓝图节点的编译,控制编译过程中statement、terminal、net的生成或配置:
- 通过讲解蓝图编辑器的技术架构,以及蓝图虚拟机的运行机制,深入的理解蓝图:
以上这些内容,主要是笔者通过阅读引擎源代码,加上一些试验验证之后,总结出来的。希望对大家有所帮助。如果有不够准确的地方,还请指出。:)
最后,夹带点私货吧:
游戏程序员的自我修养neil3d.gitee.io这是我的GitHub Page,欢迎访问。:D