全新的蓝图原生化工具可从项目蓝图生成本地 C++ 代码。完成项目后在编辑器外进行测试或进行发布时,将使用生成的代码对项目进行编译。所有蓝图类将被新生成的本地类替代。蓝图原生化的主要目的是降低项目运行时版本中的虚拟机(VM)开销。因此,生成的代码并未设计为“友好”或可重复使用。
此页面将助您上手项目蓝图的原生化。对纯蓝图项目而言,这应该是透明度最高的一个流程。如项目中也使用了 C++,或需要对原生化代码进行调试,请查阅 高级蓝图原生化 中的更多内容。
启用蓝图原生化
如需启用蓝图原生化,使用 Edit 菜单 打开 Project Settings。在 Packaging 下启用 Nativize Blueprint Assets 复选框。
之后打包项目时,以下蓝图资源将被原生化:
-
蓝图类
-
蓝图函数库
-
蓝图接口
-
动画蓝图
-
控件蓝图
-
用户定义结构
-
用户定义枚举
当前 关卡蓝图 将不会被转换。原生化代码保存的路径为 [项目目录]\Intermediate[制作平台]\NativizedAssets\Source\NativizedAssets\
。
从转换中排除蓝图
也可从转换中排除特定 蓝图。在项目的 DefaultEditor.ini
文件中创建一个 [BlueprintNativizationSettings]
标题。
-
如需排除特定类型的资源,设置
ExcludedBlueprintTypes
。例如,+ExcludedBlueprintTypes=/Script/UMGEditor.WidgetBlueprint
不会转换 控件蓝图。 -
如需排除单个资源,设置
ExcludedAssets
。例如,+ExcludedAssets=/Engine/Tutorial/SubEditors/TutorialAssets/Character/TutorialCharacter
不会转换 教程角色。
资源只有在被制成后才可进行原生化。如果未指定制作器制作资源/地图,它将对项目 Content 目录下的所有内容进行制作。如发现部分未使用的蓝图正被原生化,也可使用地图列表进行打包,排除资源。
使用虚幻自动化工具进行构建
如要在使用虚幻自动化工具进行构建时原生化蓝图,须在 BuildCookRun 命令行中添加 -nativizeAssets
开关。
C++ 协作
原生化蓝图保存在单独的新模块中,意味着游戏性模块的头文件现在模块之外使用。 须进行检查,确定所有头文件已将使用的所有类和结构体作为内含头文件或前置声明进行声明。
一些规则/限制有助于使手写代码和原生化代码之间的协作更加高效可靠。
不支持以下实现:
-
带
BlueprintVisible
或Editable
标记的私有/受保护变量 -
标记为
BlueprintPure
或BlueprintCallable
的私有/受保护函数 -
noexport
结构/类 -
带
BlueprintVisible
或Editable
标记的位域变量 -
私有位域变量
-
UBlueprintGeneratedClass
、UUserDefinedStruct
、UUserDefinedEnum
变量,或基于它们的任意类型
技术细节
原生化蓝图兼容 Visual Studio 2013 和 Visual Studio 2015,但强烈推荐使用 2015,因为它的大项目处理能力更强。 如出现奇怪的编译器/连接器错误(如 LNK1000、LNK1248),可尝试将部分类型或特定蓝图排除,削减原生化蓝图的量。
BlueprintCompilerCppBackend
模块(此路径中:Engine\Source\Developer\BlueprintCompilerCppBackend\
)将把蓝图语法树转入 C++。 BlueprintNativeCodeGen
模块(此路径中:Engine\Source\Developer\BlueprintNativeCodeGen\
)在烘焙和打包时可大展身手。