虚幻UE5引擎中的蓝图命名空间可以防止加载不必要的资产,从而加快蓝图资产的打开时间。就像在现有的编程语言中一样,因此它们可以被视为与另一个空间中的命名空间不同的分组。

对于蓝图,仅加载存在于同一命名空间中的 BP 资产,当按蓝图命名空间分离时,则加载有前后关系。如果命名空间不同,则不会加载不必要的项目,因此也会进行不必要的显示。
这个功能在使用全局函数或宏库时非常有用,当编辑器启动时,函数和宏库被加载到内存中,往往会显示很多不必要的信息,这是因为它从启动时就识别出该库是全局存在的。
因此…蓝图命名空间对此进行过滤,以便只能看到同一命名空间中的内容。
本文使用 5.1 进行讲解,大家可以在 Epic Games Launcher 中下载 5.1 最新版本,因为我对比了 5.0.3 中的命名空间还是有点区别的。

…如果你还没安装虚幻UE5引擎,可以阅读3D天堂站内详细文章如何安装它。
设置蓝图命名空间
要设置命名,首先需要去虚幻引擎编辑器偏好设置下,检查一下是否启用了命名空间编辑器功能。
该功能我在 5.0.3 中对比了下,5.0.3 默认是没启用,并且存在于实验性选项卡下,因为蓝图命名空间被列为工作流选项中,因此可视为 5.1 正式引入命名空间。

此时在内容管理面板,双击一个蓝图。

打开之后会注意到在顶部有个类设置按钮。

在详细信息中有一个蓝图命名空间项,可以使用图命名空间显式添加命名,这里我将其设置为 testBlueprintnamespace,添加后一定要编译并点击保存否则不能正常工作。

那么以上是简单的蓝图命名空间的流程,接下来我们试试蓝图命名空间的过滤分组。
按命名空间过滤函数库
接着在内容中创建一个 BP 函数库,新建一个名称为 My_Blueprint 的蓝图,在该函数库上创建一个名为 My Func 的函数。

现在直接添加命名空间,命名为 i3dttBlueNamespace。

添加后一定要点击保存和编译,否则不能正常工作。

此时可以在内容库中将鼠标悬停在蓝图上,在弹出的对话框底部有标记命名空间为刚才设置的。

接着我们尝试从另一个 BP 资产中搜索新命名空间下的 My Func,此时你会发现,搜索不到。

通常情况下自定义函数库可以在其他类型中使用的,那么它的巧妙之处就在这里了。此时你需要重复上面那个操作,在类设置中并将命名空间设置为 i3dttBlueNamespace。
设置后,导航到事件图表,现在 My Func 显示为可搜索到的上下文中,这是因为有着相同的命名空间都可见。

不可见导入命名空间
通常命名空间会自动不可见地导入命名,例如,一个 My_Blueprint_02 继承了 My_Blueprint 的资产 ,并且将 My_Blueprint_02 添加了一个名为 i3dttcom_Blue 的命名空间。
例如我打开该资产添加一个需要的变量,更改变量类型以切换到 My_Blueprint 中的对象引用类型,这时候如果勾选了隐藏未导入的类型,则命名空间没有被导入,所以在搜索中不会显示。

如果存在 i3dttcom_Blue 命名空间,即刚刚通过按类设置的 My_Blueprint 命名空间,此时它将被直接导入至已导入选项下。
全局导入命名空间
这个功能可以在编辑器偏好设置和项目设置中定义全局导入的命名空间。
编辑器偏好设置是从蓝图编辑器设置类别中添加全局命名空间导入,括号中提示仅本地用户,也就是说本地项目内所有 BP 中的命名空间。

项目设置是从蓝图项目设置分类中的全局命名空间导入,是共享的整个项目中的 BP 包含命名空间。

本文总结
以前需要添加与平台相关的代码,而现在不需要再这些之上添加更多的层,由于在命名空间中对 BP 资产进行分组,相同命名空间之间的 BP 就不会发生无用的读取,从而加快蓝图资产的打开时间。
这个对于有大量蓝图函数库和宏库资产的项目非常有用,虚幻引擎通常会在初始化时全部加载,那么蓝图命名空间的引入在一定程序上优化了加载 BP 资产的读取。
这个功能看上去是不是感觉有点绕来绕去,其实理解它也非常简单,将 BP 资产当成一个组,在组里各干各的活,与世隔绝,一旦需要牵根线引用一下,这根线就是蓝图命名空间。