高级蓝图原生化

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

Windows
MacOS
Linux
See Also
Prerequisite Topics

This page assumes you have prior knowledge of the following topics. Please read them before proceeding.

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

若要在使用虚幻自动化工具(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\"中)在烘焙和打包时会执行许多"神奇的变化"。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback