IDE的项目文件

自动生成当前工作区中的游戏和模块的项目文件的过程。

Windows
MacOS
Linux

以下指南适用于从源代码下载并编译UE4的用户,该代码已在GitHub上提供。

如已下载最新的虚幻引擎4(UE4)代码,您可能会注意到其中未含有用于编译和运行引擎或游戏范例的Visual Studio(VS)或Xcode项目文件。您需要运行一个脚本,它将生成可供加载的项目文件:

  • 运行位于主UE4目录中的GenerateProjectFiles.bat文件。

    您可以从任何文件夹运行该脚本。

  • 项目生成器工具将分析模块和目标编译文件,并生成新的项目文件。此进程最长需要约15秒。

对于VS开发者而言,此操作将在同一目录中生成一个UE4.sln文件。您将使用此解决方案文件来编译和运行UE4游戏和程序。首次编译时,我们建议使用Win64平台的开发配置进行编译。

默认情况下,我们将针对检测到SDK的所有可用平台生成可编译项目,以便您还能够编译和调试控制台和移动平台。如只想针对当前运行平台(如Windows)生成项目,请使用-CurrentPlatform参数运行GenerateProjectFiles.bat。项目文件容量会相对更小。

注意:从源码管理同步新的代码修改后,需重新运行GenerateProjectFiles.bat。如忘记此操作,编译或运行游戏时可能会出错。

如对模块进行添加或删除源文件等本地修改,应重新运行GenerateProjectFiles.bat。不建议手动更改项目文件。

用UnrealVS扩展进行整合

VS的UnrealVS扩展包括一个工具栏按钮,您可以单击该按钮重新生成当前已加载解决方案的项目文件。

同时还可将快捷键绑定到此功能。在VS中,打开工具(Tools )->选项(Options)-> 环境(Environment)-> 键盘(Keyboard),然后搜索UnrealVS.RefreshProjects。

注意:加载解决方案后才会启用此功能(因为工具需要了解要针对哪个代码分支来生成项目)。如尚未生成 UE4.sln 文件,需首先直接运行 GenerateProjectFiles.bat 脚本。

命令行选项(高级)

项目生成器拥有部分可选命令行参数,如有需要可以使用这些参数来自定义已生成项目文件,以更好地匹配用户需求。通常不需要、也不推荐使用这些选项。

选项

描述

-CurrentPlatform

只生成当前桌面平台(Windows或Mac)的可编译项目,而非所有检测到的可用目标平台。

-2015

以VS 2015原生格式生成项目。设置此项后,将使用Visual C++2015编译器进行编译。

-2017

以VS 2017原生格式生成项目。设置此项后,将使用Visual C+2017编译器进行编译。

-ThirdParty

将标头和其他文件从第三方库中添加至项目。举例而言,如希望在如PhysX、Steamworks或Bink等的Visual Assist中查看符号和文件,此操作将十分实用。但它会增加项目文件的加载时间!

-Game GameName

要求项目生成器生成仅包含指定项目名称的代码和内容的项目(不包括其他所有已发现项目)。同时必须指定项目名称。举例而言,GenerateProjectFiles.bat ShooterGame.uproject -Game 将生成仅包含ShooterGame的源和目标的项目。如想在单个游戏项目中包含引擎源代码和程序,也可以传递 -Engine 参数。

-Engine

使用 -Game 时,生成的解决方案会同时包含引擎代码、内容和程序。如对游戏项目进行操作时需大量修改引擎源代码,此操作将十分实用。

-NoIntelliSense

跳过生成用于在IDE中自动完成和错误波浪线提示的IntelliSense数据。

-AllLanguages

包括所有语言的引擎文档。默认情况下项目中仅包含英文文件。

-OnlyPublic

指定后,引擎模块的已生成项目只仅会包含公开头文件。引擎模块默认包含所有源文件。此操作可缩短项目的加载时间,但导航引擎代码可能会变得更难。

-NoShippingConfigs

在已生成项目中省略 ShippingTest 编译配置。这将减少需要处理的目标配置的数量。

-Platforms=PlatformName

覆盖生成可编译项目所针对的默认平台集,转而生成指定平台的项目。可利用“+”字符进行分隔,指定多个平台。此操作同时会使用包含平台名称的后缀来命名生成的解决方案文件。

常见问题

为什么项目文件尚未更新,新添加的源文件却已被编译?

UE4编译系统实际上不需要项目文件来编译代码。虚幻编译工具始终使用模块和目标编译文件来寻找源文件。因此,添加新的源文件并触发编译时,即使项目文件未被刷新,新的源文件也可能被包含在编译中。请留意此情况。

实际项目保存在何处?

对VS项目而言,生成的解决方案文件为UE4.sln,并保存在UE4根目录中。但项目文件保存在/UE4/Engine/Intermediate/ProjectFiles/目录中。可安全地随时删除这些文件并重新生成项目,但如进行删除,可能会丢失部分项目特定的偏好(如命令行参数字符串)。

生成项目文件的优点有哪些?

当然是有利也有弊,以下是我们决定生成UE4项目文件的主要原因:

  • UE4被设计为可使用多平台进行工作,但不同团队可能仅会使用部分特定平台进行工作。生成项目文件后,可省略不相关的特定平台文件和编译配置。

  • UE4编程方法由多个子模块组成,为方便程序员添加新模块,我们将其设计得尽可能简单。

  • 项目生成器发出高度精确的定义,并包括使用UE4代码时VS IntelliSense所用的路径。

  • 自动生成项目文件时,设置新项目将更加容易。

  • 我们希望能支持多种平台和开发环境(如VS和Xcode)。手动维护多个项目文件集容易出错,且极为枯燥。

  • 我们希望让程序员可以生成高度自定义的项目文件。希望此操作会随着时间而变得更为重要。

  • 源文件的目录结构将在项目文件解决方案层级中自动镜像。在浏览源文件时此操作十分便利,但手动创作的项目将变得难以维护。

  • UE4编译配置非常复杂,且难以手动维护。对开发人员而言,项目生成器将它变得几乎一目了然。

那其他文件在项目中有何作用?

除C++模块的源代码外,我们还将其他多个文件自动添加到生成的项目中。这是便于在搜索时寻找此类文件。以下是添加到已生成项目中的其他文件的部分范例:

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

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

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

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

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

  • 特定外部(非已生成)项目文件(如UnrealBuildTool、Clean)

为什么没有项目文件签入到源码管理中?

将源码管理冲突合并到项目文件中既繁琐、又容易出错。新系统将项目文件视为纯中间物,从而完全避免了这种情况。另外,对开发不同游戏项目的各个团队而言,解决方案文件并不相同。如不进行修改,Epic使用的项目文件对其他团队可能并无用处。

`GenerateProjectFiles.bat`的实际用途是什么?

此脚本是一个围绕虚幻编译工具的简单包装,其以一种特殊的模式启动,其将编译项目文件而非程序可执行文件。其使用 -ProjectFiles 命令行选项来调用虚幻编译工具。

我正在修改项目生成器代码。该如何对其进行调试?

  • 将启动项目更改为虚幻编译工具。

  • 将用于调试的命令行参数设为:-ProjectFiles

  • 将工作目录设置为本地路径:[您的UE4目录]/Engine/Source/

  • 正常编译和调试。

注意:运行时,项目生成器可能会破坏VS中使用的项目文件。因此,有时将虚幻编译工具项目直接加载到VS中,而不通过常规UE4解决方案文件进行调试将十分实用。

如何同时编译多个配置?

可使用VS中的“批编译”功能。其位于编译(Build)菜单下。只需选择所有要编译的配置并单击“编译(Build)”即可。我们正设法让此界面在之后变得更加实用。

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见