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)”即可。我们正设法让此界面在之后变得更加实用。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback