高级蓝图原生化

程序员将游戏进程元素展示给蓝图的技术指南。

Choose your operating system:

Windows

macOS

Linux

前置主题

为了理解并使用本文中的内容,请确保您已掌握以下主题:

使用虚幻自动化工具进行构建

若要在使用虚幻自动化工具(Unreal Automation Tool)从命令行进行构建时将蓝图原生化,请将"-nativizeAssets"切换为"BuildCookRun"命令。

标头声明

原生化蓝图存储在一个新的独立模块中,这意味着来自游戏进程模块的标头现在用于原始模块之外。 您应该检查所有的标头是否声明了所有正在使用的类和结构体;它们要么作为包含的标头,要么作为前向声明。

修复缺失的标头

很多项目都有一个"聚合"标头:"[GameName]/[GameName].h",或"[GameName]/Public/[GameName].h"。

  • 如果您将此标头的路径添加到"[BlueprintNativizationSettings]"下的"DefaultEditor.ini"中的"FilesToIncludeInModuleHeader", 您可以修复许多与缺失标头相关的问题。

促进代码合作

有一些限制有助于使手工编写的代码和原生化代码之间的合作变得更加可靠和高效。出于这种考虑, 不支持以下实现:

  • 标记为"BlueprintPure"或"BlueprintCallable"的私有和受保护函数

  • "noexport"结构体和类

  • 带"蓝图可见(BlueprintVisible)"或"可编辑(Editable)"标签的Bitfield变量

  • 私有Bitfield变量

  • "UBlueprintGeneratedClass"、"UUserDefinedStruct"和"UUserDefinedEnum"变量(或基于这些变量的任何类型)

技术细节

如果遇到编译器或连接器错误(如LNK1000或LNK1248),请尝试通过在"DefaultEngine.ini"配置设置文件中 排除蓝图类型或特定蓝图来减少项目中原生化蓝图的数量。有关从原生化中排除蓝图的更多信息, 请参阅 原生化蓝图 文档。

如果您想了解蓝图原生化过程的"内部"工作方式,请通读以下模块:

  • "BlueprintCompilerCppBackend"模块(在"Engine\Source\Developer\BlueprintCompilerCppBackend\"中)将蓝图语法树转换为C++。

  • "BlueprintNativeCodeGen"模块(在"Engine\Source\Developer\BlueprintNativeCodeGen\"中)在烘焙和打包时会执行许多"神奇的变化"。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消