源码版引擎打包

从 UnrealEngine 源码编译的引擎(以下简称源码版引擎),打包和普通项目有一定差异,可以遵循以下步骤:

以下假设我们的项目名称为 MyProject (.uproject 中的 name 和文件名,文件夹均为 MyProject),并且插件是放在项目的 Plugins 文件夹下:

只以 Windows 平台为例,MediaPipe4U 只支持 Win64 构建,如果你使用其他平台交叉编译,步骤可能稍有差异。

启用插件

MyProject.uproject 文件中 MediaPipe4U 用到的插件都已经 Enable, 如下文件:

{
	"FileVersion": 3,
	"EngineAssociation": "5.0",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "MyProject", 
			"Type": "Runtime",
			"LoadingPhase": "Default"
		}
	],
	"Plugins": [
		{
			"Name": "ModelingToolsEditorMode",
			"Enabled": true,
			"TargetAllowList": [
				"Editor"
			]
		},
		{
			"Name": "MediaPipe4U",
			"Enabled": true
		},
		{
			"Name": "GStreamer",
			"Enabled": true
		},
		{
			"Name": "MediaPipe4UGStreamer",
			"Enabled": true
		},
		{
			"Name": "MediaPipe4ULiveLink",
			"Enabled": true
		},
		{
			"Name": "MediaPipe4UBVH",
			"Enabled": true
		},
		{
			"Name": "MediaPipe4UNvAR",
			"Enabled": true
		},
		{
			"Name": "MediaPipe4USpeech",
			"Enabled": true
		}
	]
}

MyPorject 使用了所有的 MediaPipe4U 插件,如果你只需要动补功能,你只需要确保 MediaPipe4U 的 Enable 已经设置为 true


检查 LinkType

这是 MyProject 的 target.cs 文件示例:

using UnrealBuildTool;
using System.Collections.Generic;

public class MyProjectTarget : TargetRules
{
	public MyProjectTarget( TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		LinkType = TargetLinkType.Default; // Here can not be Modular
		DefaultBuildSettings = BuildSettingsVersion.V2;
		ExtraModuleNames.AddRange( new string[] { "MyProject" } );
	}
}

确保你的 LinkType 不是 TargetLinkType.ModularMediaPipe4U 不支持 Modular 编译。

LinkType = TargetLinkType.Default; 这行不是必须的,默认是 Default
LinkType = TargetLinkType.Monolithic 也是可以的,但是不能是 Modular


手动 Copy C++ 链接符号文件

  • 在项目根目录下(.uproject 文件所在目录)新建 copy_intermediate.bat 文件,用记事本打开它,复制下面的文件内容:
set TARGET_DIR=%~dp0Intermediate
set PLUGIN_DIR=%~dp0Plugins
set PROJECT_MODULE_NAME=MyProject


set DEV_DIR=%TARGET_DIR%\Build\Win64\%PROJECT_MODULE_NAME%\

xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4U\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\GStreamer\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4UGStreamer\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4UBVH\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4ULiveLink\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4UNvAR\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"
xcopy /S /Y "%PLUGIN_DIR%\MediaPipe4Speech\Intermediate\Build\Win64\UnrealGame\" "%DEV_DIR%"

pause

注意:文件第三行中的 MyProject 改为你的项目名称,xcopy 部分可以注释掉你没有用到的插件。

  • 保存 copy_intermediate.bat 文件

  • 鼠标双击执行 copy_intermediate.bat

这个脚本做了什么 ?

执行脚本后会把链接符号复制到你的项目 Build 目录, 这样你在编译时就不会出现 LINK 2XXX 错误。 Launcher 版引擎打包时会自动进行复制操作,源码版引擎不会,所以我们需要这个脚本手动执行这个操作。

xcopy /S /Y “%PLUGIN_DIR%\ PluginName \Intermediate\Build\Win64\UnrealGame" “%DEV_DIR%”

xcopy 命令这一行是一个固定格式用来复制一个插件的链接符号,每个插件都需要复制。 其中 PluginName 可以替换为一个项目中的插件(Plugins 文件夹中的任意插件目录)。

你可以用这个脚本处理任何预编译的插件打包问题。


打包你的项目

UnrealEngine 项目打包请参考文档:

https://docs.unrealengine.com/5.0/packaging-unreal-engine-projects/

如果一切顺利,现在你的项目就会成功打包了。