高级蓝图原生化

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

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\"中)在烘焙和打包时会执行许多"神奇的变化"。

在Windows上调试已转换的代码

如果您正在处理一个已经包含一些C++代码的项目,那么您可以使用现有的项目解决方案来调试代码。但是,如果您的项目最初只包含蓝图,则需要运行"GenerateProjectFiles"批处理文件,以便您的项目拥有Visual Studio解决方案。

请勿使用此解决方案(或主UE4解决方案下的新项目)来编译项目或构建项目的编辑器版本。

步骤

以下步骤假设您已经烘焙、构建并暂存了您的项目。

  1. 导航到NativizedAssets插件文件夹,该文件夹应该位于游戏的中间文件夹中(例如"[GameDirectory]\Intermediate\WindowsNoEditor\NativizedAssets")。

    NativizedAssetsFolder_Loc.png

  2. 将NativizedAssets插件文件夹移至游戏的插件文件夹(例如"[游戏目录]\Plugins")。

    单击显示全图。

  3. 现在,将UE4编译为一个开发(或开发客户端、开发服务器)可执行配置,将"-basedir="[已烘焙游戏的路径]\Binaries\Win64""作为命令行参数进行传递。

    将"-basedir="""作为命令行参数进行传递会将UE4指向您游戏的已烘焙构建。

此时,您应该能够自行调试和修改原生化代码。

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