原生化蓝图

面向程序员的技术指南,介绍如何将Gameplay元素公开到蓝图。

Choose your operating system:

Windows

macOS

Linux

当团队用蓝图脚本编写Gameplay时,他们不必编写或编译原生C++代码即可创建新的UClass。因此,蓝图非常适用于 没有原生C++程序员技术专业知识的游戏团队。非程序员完全可以使用蓝图的原因是蓝图节点 在虚拟机(VM)中运行,让它们能够调用C++函数。但弊端是,依赖VM将蓝图转换为原生C++代码需要付出一些代价, 将蓝图代码转换为原生C++函数可能会拖慢每一帧的游戏性能。

如果在VM中运行蓝图的成本可以忽略,则VM开销就在可接受的范围内;但是,有时你会希望游戏运行速度尽可能快 (尤其是要交付到硬件能力有限的设备时)。这正是虚幻引擎蓝图原生化工具发挥作用的地方。

Epic在开发最新的VR游戏 《Robo Recall》 时成功使用了蓝图原生化。

减少VM开销

蓝图原生化的主要目的是根据项目蓝图生成原生C++代码,从而降低项目运行时版本中的虚拟机开销。一般来说, 所有蓝图类都会被新生成的原生C++类所取代,然后在 烘焙过程 中将这些C++类编译到项目中。 虽然你能够用文本编辑器阅读转换后的C++代码,但你会注意到,该代码并没有设计为可重用(或者生成为"读者友好型")。

蓝图

原生化蓝图

这里,我们对比的是玩家角色蓝图及其原生化代码。

本页将向你介绍如何开始原生化项目蓝图,对于仅使用蓝图的项目,这应该是非常简单的任务。首先,你需要知道 在哪里查找禁用和启用蓝图原生化所需的用户界面(UI)。

启用蓝图原生化

首次创建项目时,蓝图原生化默认是禁用的。要找到蓝图原生化设置,从虚幻编辑器打开 项目设置(Project Settings) 菜单,然后从左侧栏选择 打包(Packaging) 。从 项目——打包(Project - Packaging) 菜单内部,你应能够看到 蓝图(Blueprints) 下拉菜单。

点击查看大图。

开发期间你可以随时选择禁用蓝图原生化,方法是从 蓝图原生化方法(Blueprint Nativization Method) 下拉列表中选择 禁用(Disable)

BPNativization_DisabledUI1.png

如你所见,该下拉列表中有两个额外选项可供你使用:分别是

  • 包含(Inclusive) 原生化

  • 排他(Exclusive) 原生化

包含原生化

当你选择 包含(Inclusive) 原生化时,你选择的是原生化项目中支持的所有蓝图类。

BPNativization_InclusiveUI.png

选择 包含(Inclusive) 原生化方法后,在 打包过程 中注意务必要注意的是, 虚幻自动化工具(UAT)将对以下支持的蓝图资源进行原生化:

  • 蓝图类

  • 蓝图函数库

  • 蓝图接口

  • 动画蓝图

  • 小部件蓝图

  • 用户定义的结构

  • 用户定义的枚举值

目前,关卡蓝图和蓝图宏不受蓝图原生化工具的支持,不会转换为原生C++代码。

从转换中排除蓝图

蓝图原生化工具将蓝图节点转换为原生C++代码,产生的可执行文件使用更多机器指令、 依赖项和嵌入式元数据来支持转换。

因此,务必注意如果选择 包含(Inclusive) 蓝图原生化方法, 可执行文件大小将增长到你的目标平台无法接受的大小。

你可以指定要从转换过程中排除的蓝图来缓解可执行文件大小激增的情况。要从转换中排除蓝图, 打开项目的`DefaultEditor.ini`文件,创建包含以下列配置属性的 [BlueprintNativizationSettings] 标头:

  • 要排除特定类型的蓝图资源,设置`ExcludedBlueprintTypes`配置属性。
    例如,`+ExcludedBlueprintTypes=/Script/UMGEditor.WidgetBlueprint`不会转换任何小部件蓝图资源。

  • 要排除特定蓝图资源,设置`ExcludedAssets`配置属性。
    例如,`+ExcludedAssets=/Engine/Tutorial/SubEditors/TutorialAssets/Character/TutorialCharacter`不会转换 **教程角色** 蓝图资源。

DefaultEngineINI.png

请注意,仅当蓝图资源作为打包过程的一部分进行烘焙时,才会在打包过程中原生化。因此,如果你没有指定要烘焙的任何蓝图资源或贴图,虚幻引擎 将烘焙 Content 目录中的所有内容。如果选择 包含(Inclusive) 方法后,你注意到未使用的蓝图被原生化,或许应选择 排他(Exclusive) 蓝图原生化方法。

排他原生化

如果要向硬件资源有限的设备交付更大的项目,我们建议你选择 排他(Exclusive) 蓝图原生化方法。

BPNativization_ExclusiveUI.png

虽然 包含(Inclusive) 方法适用于较小项目,即不会因为可执行文件大小激增而超过目标硬件容纳该应用的容量,但选择 使用 排他(Exclusive) 蓝图原生化方法也有一些优势。部分优势包括:

  • 限制可执行文件的最终大小。

  • 有效防止转换未使用蓝图资源。

  • 能够显式选择要转换的蓝图资源。

一般来说,如果你的蓝图较为占用计算资源,则建议选择排他(Exclusive)蓝图原生化方法;包括(但不限于):

  • 有大量节点的蓝图。

  • 需要优化循环的蓝图。

  • 执行复杂数学运算的蓝图。

选择要原生化的蓝图

如果你还没有包含蓝图资源的项目,请使用一个可用的项目模板创建一个新项目。为便于说明, 我们将使用 第三人称(Third Person) 项目模板。

执行以下步骤选择想要使用 排他(Exclusive) 蓝图原生化方法进行原生化的蓝图资源。

  1. 首先,打开 编辑(Edit) 菜单,并选择 项目设置...(Project Settings...)

    点击查看大图。

  2. 打开 项目设置(Project Settings) 菜单,单击 打包(Packaging) ,打开 项目设置——打包(Project Settings - Packaging) 菜单。

    点击查看大图。

  3. 蓝图(Blueprints) 子菜单,单击 蓝图原生化菜单(Blueprint Nativization Menu) 下拉列表。

    点击查看大图。

  4. 选择 排他(Exclusive) 选项以选择排他蓝图原生化方法。

    点击查看大图。

  5. 继续选择子菜单底部的展开箭头,显示空数组。

    点击查看大图。

    该数组将包含你显式选择进行原生化的蓝图资源列表。 BPNativization_ExclusiveStep_5Note.png

  6. 退出 项目设置(Project Properties) 菜单后,导航到包含你的蓝图资源的文件夹。

    点击查看大图。

  7. 现在,打开你想要原生化的蓝图资源。

    点击查看大图。

  8. 蓝图编辑器 打开后,单击 类设置(Class Settings) 按钮。

    点击查看大图。

  9. 要将该蓝图资源标记为需要原生化,单击 细节(Details) 面板 打包(Packaging) 子菜单中的 原生化(Nativize) 复选框。

    点击查看大图。

  10. 确保先单击 保存(Save) 按钮,再关闭该资源的 蓝图编辑器

    点击查看大图。

  11. 要核实你选择进行排他原生化的蓝图资源,打开 项目设置(Project Settings) 菜单以查看你已标记为需要原生化的蓝图资源列表的数组。

    点击查看大图。

到这里,你已准备好使用 排他(Exclusive) 蓝图原生化方法烘焙和打包项目了。

请注意,为了构建你选择进行原生化的蓝图,所有受支持的依赖项也会标记为需要原生化。

查找原生化代码

你可以在 [ProjectDirectory]\Intermediate\Plugins\NativizedAssets 中找到原生化代码

其他资源

在以下功能亮点视频中,你可以找到包含蓝图原生化的更多信息。

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