项目文件自动生成

如果您下载了最新的虚幻引擎 4 源码,您可能会注意到已经没有用于编译及运行引擎或示例游戏的 Visual Studio 或 Xcode 项目文件了。您需要运行一个用于生成项目文件的脚本来加载它们:

  • 运行位于UE4主目录中的 GenerateProjectFiles.bat 文件 (对应 '//depot/UE4/`)。

    您可以从任何文件夹中运行该脚本。(如果您愿意可以创建一个桌面快捷方式。)

  • 项目生成器工具将分析模块和目标编译文件,并生成新的项目文件。这大约会花15秒钟的时间。

完成了!对于 Visual Studio 开发人员来说,这将在同一目录中生成一个 UE4.sln 文件。您将使用该解决方案来编译并运行虚幻引擎4游戏及程序。(初次编译时,我们推荐您在 Win64 平台下使用 Development 配置进行编译!)

默认情况下,我们对检测到 SDK 的所有可用平台生成可编译的项目,这样您也可以编译并调试游戏机平台及移动平台。如果您仅仅想要对当前运行的平台生成项目(例如Windows.),请使用 '-CurrentPlatform' 参数来运行 GenerateProjectFiles.bat 。此项目的文件将会减少一些。

要点 : 请记住从源码控制同步完新的变更代码后要重新运行 GenerateProjectFiles.bat 文件! 如果您忘记执行该操作,那么当编译或运行您的游戏时很可能会遇到问题。

如果您本地修改了某个模块,比如添加或删除了源码文件,那么您应该再次重新运行 GenerateProjectFiles.bat 文件。我们不推荐您手动地修改项目文件。

和 UnrealVS 扩展相集成

Visual Studio 的 UnrealVS扩展 插件包含一个工具条按钮,点击该按钮便可以重新生成当前已加载的解决方案的项目文件。

您也可以为该功能绑定一个快捷键。在 Visual Studio 中,打开 Tools(工具) -> Options(选项) -> Environment(环境) -> Keyboard(键盘) ,然后搜索 UnrealVS.RefreshProjects

注意,仅当您加载了解决方案后才会启用该功能(因为该工具需要知道要为哪个分支生成项目文件)。如果您还没有生成 UE4.sln 文件,那么首先您需要直接运行 GenerateProjectFiles.bat 脚本。

命令行选项 (高级)

项目生成器有一些可选的命令行选项,如果您想自定义您生成的项目文件来进一步满足您的需求,您可以使用它们。一般不需要或不推荐使用这些选项。

选项 描述
-CurrentPlatform 仅对当前桌面平台生成可编译项目(Windows 或 Mac),而非对所有检测到的可用对象平台。
-2012 生成 Visual Studio 2012 的项目文件。默认情况下,生成的将是 Visual Studio 2013 的项目文件。
-2013 生成 Visual Studio 2013 的项目文件。这是默认选项
-2015 生成 Visual Studio 2015 的项目文件,在此情况下将会使用 2015 的编译器。
-ThirdParty 将来自第三方库的头文件和其他文件添加到项目中。如果您想在 Visual Assist 中查看类似于 PhysX、Steamworks 或 Bink 中的标志和文件,这是有用的。但是,这将会导致加载项目文件的时间变长!
-Game GameName 通知项目生成器忽略掉所有其它发现的项目,生成仅包含特定项目名称的代码和内容的项目。请确认同时指定项目名称。举例来说, GenerateProjectFiles.bat ShooterGame.uproject -Game 将为 ShooterGame 项目生成仅具有源码和对象的项目。如果您想要包含除单个游戏项目外的引擎源代码及项目,您也可以传入 -Engine 参数。
-Engine 当和 -Game 一起使用时,会造成引擎代码,内容和项目都被包括在生成的解决方案中。当您在运行游戏项目时需要大量使用引擎源代码时,这就很有用了。
-NoIntelliSense 对自动完成跳过使用的 IntelliSense 数据的生成并在IDE中对错误划波浪线。
-AllLanguages 包含所有语言的引擎文档。默认情况下,我们仅在文档中包含英语文件。
-OnlyPublic 当使用该选项时,近 public 头文件才会被包含在引擎使用的生成项目模块中。默认情况下,所有源文件都会被引擎模块包含。这个选项能够提供更快的项目加载时间,但会使得代码跳转变得稍嫌麻烦一些。
NoShippingConfigs 从生成的项目中省略ShippingTest编译配置。这样将会降低您需要处理的目标配置数量。
-Platforms=PlatformName 覆盖生成可编译项目的默认平台,并转而生成您指定的平台的项目。您可以通过使用 '+' 字符来分隔它们,从而指定多个平台。这还会造成生成的解决方案文件的名称使用包括平台名称的后缀。

常见问题解答

为什么即使我没有更新项目文件也会编译新增的源码文件?

虚幻引擎4编译系统实际上不需要项目文件就可以编译代码。Unreal Build Tool(虚幻编译工具)通常使用模块和目标编译文件来定位源码文件。由于这个原因,如果您添加一个源码文件并且启动了一次编译,那么即时没有刷新项目文件,在编译时也会包含新的源码文件。请记住这一点。

实际项目保存在哪里?

对于 Visual Studio 项目来说,生成的解决方案文件是 UE4.sln,它保存在 UE4 根目录中。但是,项目文件保存在 /UE4/Engine/Intermediate/ProjectFiles/ 目录内。任何时候都可以删除及重新生成这些文件,但是,您如果您删除这些文件,您可能会丢失某些针对特定项目的偏好设置,比如命令行参数字符串。

生成项目文件的优势?

当然这既有优势也有劣势,但以下是我们决定生成UE4项目文件的几点重要原因:

  • 虚幻引擎4的设计目的是和很多平台协同工作,但是不同的团队在任何时候可能仅需要应用几个特定的平台。通过生成项目文件,我们可以忽略掉不相关的针对特定平台的文件及编译配置。

  • UE4 编程机制包含很多子模块,所以让程序员可以轻松地添加新模块变得至关重要。

  • 当您使用 UE4 代码时,项目生成器生成了高度精确的定义和包含路径,以便 Visual Studio IntelliSense 使用。

  • 当自动生成项目文件时创建一个新项目变得更加容易。

  • 我们想支持多元化的平台和开发环境 (比如 Visual Studio 和 Xcode)。手动维护多个项目文件的设置是非常容易出错的,且非常麻烦。

  • 我们想让程序员能够生成高度自定义的项目文件。我们认为随着时间的推移,这点将变得更加重要。

  • 项目文件解决方案层次结构自动映射了源码文件的目录结构。当浏览源码文件时这是非常方便的,但是维护手动创建的项目比较困难。

  • 虚幻引擎编译配置是非常复杂的且手动维护起来非常难。对于开发者来说,项目生成器使得这个过程几乎接近透明化。

项目中其他文件的作用?

除了C++模块的源码,我们自动向生成的项目中添加了其他数种类型的文件。这仅是为了可以轻松地在搜索时定位这些文件。以下是添加到生成的项目中的几个文件示例:

  • 着色器源码文件 (*.usf files)

  • 引擎文档文件 (*.udn files)

  • 程序配置文件(*.ini files)

  • 本地化文件 (*.int files)

  • 程序资源文件和清单文件 (*.rc, *.manifest)

  • 包含了外部(非生成的) 项目文件 (比如 UnrealBuildTool、Clean)

为什么没有把项目文件迁入到源码控制中?

融合源码控制冲突到项目文件非常枯燥,且非常容易出错。新系统通过将项目文件完全作为临时文件对待来避免这个问题。另外,对于处理不同游戏项目的团队来说解决方案文件是不同的。可能Epic内部使用的项目文件如果不作任何修改对于其他团队来说是没有用处的。

GenerateProjectFiles.bat 实际上执行哪些处理?

这个脚本简单地封装了 Unreal Build Tool(虚幻编译工具),它以一种特殊模式启动,用于编译项目文件而不是编译项目可执行文件。它通过 -ProjectFiles 命令行选项来调用 Unreal Build Tool(虚幻编译工具)。

我正在修改项目生成器代码。我该如何调试它?

  • 把您的启动项目改为 UnrealBuildTool。

  • 设置调试的命令行参数为: -ProjectFiles

  • 设置工作路径为以下路径对应的本地路径: //depot/UE4/Engine/Source/

  • 正常地编译及调试。

请注意,在您进行处理时项目生成器可能会影响您在 Visual Studio 中正在应用的项目文件。由于这个原因,有时候直接把 UnrealBuildTool 项目加载到 Visual Studio 是有用的,而不是通过正常的UE4解决方案文件进行调试。

我怎样同时针对多个配置进行编译?

您可以使用 Visual Studio 中的 Batch Build(批量编译) 功能。您可以在 Build(编译)菜单下找到这个选项。简单地选择您想编译的所有配置,并点击 Build(编译)。我们正在寻找更好的方法,以使得这个界面以后应用起来更加方便。