ue4program

UE 的很多工具链,是基于 UE 自身的功能编译出来的程序,如 UnrealPak、UnrealFrontEnd、UnrealVersionSelector 等,它们都是 TargetProgram的类型的工程。
但是 UE 本身并没有提供创建这种工程的方法,所以我写了一个创建工具,能够方便地创建 Standalone Application 的模板工程,能够把 UE 当作一个大号的第三方库开发命令行合作或 GUI 程序。

首先,下载 我写的hxhb/ue4program,将其添加到系统的 PATH 路径中。添加之后的用法如下:

1
2
# ue4program.exe ProgramName
$ ue4program.exe StandaloneApplication

此时会在当前目录下创建出一个 StandaloneApplication 文件夹,其目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
StandaloneApplication
│ GenerateProgramProject.bat
│ OpenProgramProject.bat
│ StandaloneApplication.Build.cs
│ StandaloneApplication.Target.cs

├─Resources
│ Icon.ico
│ Resource.h
│ Resource.rc
│ VersionResource.inl

└─Source
├─Private
│ │ RealExecutionMain.cpp
│ │ StandaloneApplication.cpp
│ │
│ ├─Console
│ │ ConsoleMain.cpp
│ │
│ └─Windows
│ WindowsMain.cpp

└─Public
RealExecutionMain.h
StandaloneApplication.h
StandaloneApplicationLog.h

本篇文章着重需要分析的是 *.target.cs*.build.cs这两个文件.
创建出来之后,需要将 StandaloneApplication 文件夹移动到 Engine\Source\Programs 下,UE 所有的辅助程序 (UHT/UBT 等) 都在这个目录之下。
然后,运行 GenerateProgramProject.bat,这是我仿照 UE 的GenerateProjectFiles.bat 写的一个脚本,通过调用 UBT 来创建 Standalone Application 程序,命令如下:

1
2
# bash path in Engine\Source\Programs\StandaloneApplication
$ UnrealBuildTool.exe -notinstallengine -ProjectFiles StandaloneApplication

注意 :直接在安装版引擎中使用上面的命令会报错(不允许创建非 Game 项目),因为虽然传入了-notinstallengine 参数,但是对 Engine/Build/InstalledBuild.txt 文件检测的优先级高于-notinstallengine

1
2
3
4
Zhalipeng MINGW64 /d/UE_4.18/Engine/Source/Programs/StandaloneApplication (master)
$ ../../../../Engine/Binaries/DotNET/UnrealBuildTool.exe -notinstallengine -ProjectFiles StandaloneApplication
ERROR: UnrealBuildTool Exception: A game project path was not specified, which is required when generating project files using an installed build or passing -game on the command line

我写的脚本中做了检测,如果使用的是安装版引擎会先重命名 InstalledBuild.txt,生产完毕后会恢复(但是我还是建议不要在安装版引擎中执行)。其执行完毕后会在Engine\Intermediate\ProjectFiles 下生成:

1
2
3
StandaloneApplication.vcxproj
StandaloneApplication.vcxproj.filters
StandaloneApplication.vcxproj.user

其实就是将当前项目添加到 UE 的解决方案,执行完毕之后,打开引擎根目录下的 UE4.sln, 就可以看到创建的项目了:

先来编译运行看一下结果:

资料: