三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

UE4/UE5开发:迁移缓存路径解决C盘空间不足的完整指南

UE4/UE5开发:迁移缓存路径解决C盘空间不足的完整指南

1. 项目概述:为什么你的C盘总在“哭泣”?

如果你是一名UE4或UE5的开发者,那么“C盘空间告急”这个红色警报,大概率是你开发生涯中挥之不去的噩梦。引擎编译着色器时那动辄几十GB的DerivedDataCache,编辑器运行时不断膨胀的Intermediate文件,还有那些散落在各处的临时文件,就像一群胃口惊人的“仓鼠”,悄无声息地啃食着你宝贵的系统盘空间。这不仅会导致系统运行变慢,更致命的是,一旦C盘塞满,虚幻引擎的编译过程会直接失败,报出各种磁盘空间不足的诡异错误,让你宝贵的开发时间浪费在清理磁盘和重启引擎上。

这个问题的根源,在于虚幻引擎默认的缓存路径设置。无论是UE4还是UE5,其默认的“派生数据缓存”(DerivedDataCache,简称DDC)和“中间文件”(Intermediate)目录,通常都指向用户目录下的AppData文件夹,也就是C盘。对于个人学习或小型项目,这或许还能忍受。但一旦项目变得庞大,使用了大量高精度贴图、复杂材质和蓝图,或者你需要同时维护多个项目版本时,C盘的压力就会指数级增长。更糟糕的是,如果你使用版本控制系统(如Perforce、Git LFS),这些缓存文件还可能被意外提交,污染你的代码库。

因此,将缓存路径从C盘迁移到项目目录或其他专用存储位置,不仅仅是一次简单的“搬家”,而是一项至关重要的项目环境优化和团队协作规范。它能彻底解放你的系统盘,提升引擎编译和加载的稳定性(尤其是当缓存位于更快的NVMe SSD上时),并且能实现缓存与项目的绑定,方便项目迁移和团队共享。接下来,我将结合多年的项目实战经验,为你拆解从思路到实操的完整迁移指南,并附上那些只有踩过坑才知道的细节和技巧。

2. 核心思路与方案选型:不只是改个路径那么简单

在动手之前,我们必须理解要迁移的是什么,以及有哪些可选的方案。盲目操作可能会导致引擎无法启动或项目编译错误。

2.1 认识虚幻引擎的几大“存储大户”

我们需要迁移的核心是以下两个目录,它们占据了非项目资产外的绝大部分磁盘空间:

  1. 派生数据缓存(DerivedDataCache):这是最大的“元凶”。引擎会将纹理、静态网格体、声音等资源的已编译版本(如.ddc文件)存储在这里。例如,一张4096x4096的PNG贴图,其编译后的DDC文件可能比原图大很多。当你在编辑器中打开材质或拖动模型时,引擎会优先从这里读取已处理好的数据,从而加速工作流程。默认路径是C:\Users\[你的用户名]\AppData\Local\UnrealEngine\Common\DerivedDataCache
  2. 中间文件(Intermediate):存储项目在编译过程中生成的临时文件,例如C++编译的obj文件、Blueprint编译的中间产物等。它位于每个项目的目录下,但默认也在C盘生成项目相关的临时文件。其路径类似于[YourProject]\Intermediate

此外,还有Saved目录(存储编辑器配置、日志等)和Binaries目录(存储编译后的可执行文件),但这些通常体积不大且与项目绑定,不是迁移的重点。

2.2 迁移方案深度对比

方案不止一种,选择哪种取决于你的工作模式(单人开发还是团队协作)和存储设备条件。

方案一:修改引擎全局配置文件(推荐给个人开发者/固定项目)

这是最直接、最彻底的方法。通过修改引擎或编辑器启动参数,强制指定DDC的存储路径。优点是“一劳永逸”,设置一次,所有项目都会使用新的缓存路径。缺点是如果多个项目共享同一个缓存路径,在极端情况下可能存在版本冲突(但概率极低)。

方案二:使用项目特定的配置文件(推荐给团队协作/多项目环境)

通过在项目目录下放置一个配置文件(DefaultEngine.iniGameUserSettings.ini)来覆盖全局设置。这样做的好处是缓存路径与项目绑定。当你把项目文件夹拷贝到另一台电脑或分享给团队成员时,只要配置文件一并携带,缓存路径的设置就会自动生效,保证了环境的一致性。这是团队开发的最佳实践。

方案三:使用符号链接(Symbolic Link)—— 一种“欺骗”系统的高级技巧

如果你不想修改任何引擎配置,或者有些老旧项目不方便修改,可以使用Windows的mklink命令,在C盘的默认缓存路径位置创建一个“符号链接”,将其指向D盘或其它盘符的实际文件夹。对于系统和引擎来说,它仍然在访问“C:...\DerivedDataCache”,但实际上文件读写发生在你指定的位置。这是一个非常巧妙的系统级解决方案,但操作相对底层,且对移动存储设备(如移动硬盘)的支持需要额外注意。

我的选择与建议:对于绝大多数情况,尤其是希望建立规范开发流程的团队,我强烈推荐方案二。它兼顾了灵活性和规范性。本指南也将以方案二为核心,详细展开。同时,我会补充方案一的配置方法,并简要说明方案三的适用场景与风险,让你拥有全面的决策依据。

3. 详细迁移步骤:手把手完成安全搬迁

让我们开始实战。假设我们的目标是将缓存迁移到项目目录下的一个专用文件夹,例如D:\MyUnrealProjects\MyAwesomeGame\Saved\SharedDerivedDataCache。这样做的好处是,整个项目文件夹可以被打包移动,缓存随之一起走。

3.1 准备工作:定位与备份

  1. 找到当前的缓存目录:打开文件资源管理器,在地址栏输入%LOCALAPPDATA%\UnrealEngine\Common并回车,你会看到DerivedDataCache文件夹。右键查看属性,确认其大小,这能让你直观感受到迁移的必要性。
  2. 备份现有缓存(可选但建议):虽然迁移过程不会删除原文件,但为了以防万一,你可以将整个DerivedDataCache文件夹复制到另一个安全的位置。如果新路径设置错误导致引擎无法读取缓存,你可以随时将此备份拷贝回原位(需要先关闭引擎)。
  3. 关闭所有虚幻引擎相关进程:包括Unreal Editor、Visual Studio、以及Epic Games Launcher。确保没有进程正在访问这些缓存文件。

3.2 方法一:通过项目配置文件进行迁移(团队标准做法)

这是最规范的方法,配置随项目走。

  1. 定位或创建配置文件

    • 打开你的项目文件夹,找到Config目录。
    • 查看里面是否存在DefaultEngine.ini文件。如果存在,直接用文本编辑器(如VS Code、Notepad++)打开。如果不存在,就新建一个。
  2. 编辑配置文件

    • DefaultEngine.ini文件中,找到[Core.System]这个章节。如果找不到,就在文件末尾新建这个章节。
    • 在该章节下,添加或修改以下两行关键配置:
    [Core.System] ; 将派生数据缓存路径设置为项目Saved文件夹下的一个子目录 DerivedDataCachePath=%GAMEDIR%Saved/SharedDerivedDataCache ; 可选:你也可以指定一个绝对路径,例如D盘的一个公共缓存区 ; DerivedDataCachePath=D:\UE_Shared_DDC
    • %GAMEDIR%是一个引擎内置的变量,它代表你的项目根目录。这样配置后,缓存路径就是[项目根目录]\Saved\SharedDerivedDataCache
  3. 验证与首次运行

    • 保存DefaultEngine.ini文件。
    • 重新启动你的虚幻引擎项目。
    • 打开项目后,不要进行任何操作,先关闭编辑器。
    • 去你配置的路径(例如项目下的Saved\SharedDerivedDataCache)查看,如果出现了DDC文件夹,并且里面开始有.ddc文件生成,说明配置成功。旧的C盘缓存将不再被写入新数据,但旧文件仍会保留,你可以手动清理。

3.3 方法二:修改引擎命令行参数(全局生效)

如果你想为电脑上所有的UE项目设置一个统一的、非C盘的缓存位置,可以修改编辑器快捷方式或Epic Games启动器的参数。

  1. 创建编辑器快捷方式(以UE5.1为例)
    • 找到你的UE5编辑器可执行文件,通常路径像C:\Program Files\Epic Games\UE_5.1\Engine\Binaries\Win64\UnrealEditor.exe
    • 右键该文件,选择“创建快捷方式”。
  2. 修改快捷方式属性
    • 右键新建的快捷方式,选择“属性”。
    • 在“目标”栏的末尾,添加以下启动参数(注意前面有个空格):
      -ddc="D:\MyGlobalUE_DDC"
    • 完整的“目标”栏看起来应该是:
      "C:\Program Files\Epic Games\UE_5.1\Engine\Binaries\Win64\UnrealEditor.exe" -ddc="D:\MyGlobalUE_DDC"
    • 点击“应用”并“确定”。
  3. 通过此快捷方式启动项目
    • 将这个快捷方式拖动到桌面或任务栏方便使用。
    • 以后都通过这个快捷方式启动编辑器,或者将你的项目文件(.uproject)拖放到这个快捷方式上打开。这样,无论打开哪个项目,都会使用D:\MyGlobalUE_DDC作为缓存目录。

重要提示:这种方法设置的路径优先级低于项目中的DefaultEngine.ini配置。也就是说,如果项目里配置了DerivedDataCachePath,那么命令行参数-ddc会被忽略。这保证了项目级配置的最高优先级,符合团队协作规范。

3.4 方法三:使用符号链接(mklink)重定向

如果你面临的情况非常特殊(例如,某些第三方插件硬编码了缓存路径),或者你只是想临时解决C盘空间问题而不想动任何配置,可以尝试此方法。

  1. 移动现有缓存文件夹
    • C:\Users\[你的用户名]\AppData\Local\UnrealEngine\Common\DerivedDataCache整个文件夹剪切到你想要的目标位置,例如D:\UE_DDC
  2. 以管理员身份打开命令提示符(CMD):在开始菜单搜索“cmd”,右键选择“以管理员身份运行”。
  3. 创建目录符号链接:在CMD中输入以下命令并回车:
    mklink /J "C:\Users\[你的用户名]\AppData\Local\UnrealEngine\Common\DerivedDataCache" "D:\UE_DDC"
    • /J参数表示创建“目录联接”(Junction),这是符号链接的一种,兼容性较好。
    • 命令执行成功后,你会在C盘的原始位置看到一个带有快捷方式图标的DerivedDataCache文件夹。访问它就像访问D:\UE_DDC一样。
  4. 验证:启动虚幻引擎,进行一些操作(如打开一个材质),然后检查D:\UE_DDC目录下是否有新文件生成。

风险与注意:符号链接虽然强大,但在网络驱动器或某些外部存储设备上可能不稳定。在团队环境中,每台机器都需要单独执行此操作,维护成本高,不推荐作为团队标准方案。删除时,应直接删除符号链接本身(C盘那个带箭头的文件夹),而不是目标文件夹。

4. 迁移后的优化与深度管理

成功迁移只是第一步,要让这套新缓存体系高效稳定运行,还需要一些优化和管理策略。

4.1 路径选择的最佳实践

  • SSD优先:将缓存路径设置到固态硬盘(SSD),尤其是NVMe SSD,能极大提升着色器编译和资源加载速度。这是迁移带来的最直接性能红利。
  • 避免网络路径:尽量不要将缓存路径设置到网络驱动器(NAS、共享文件夹)。网络延迟和不确定性会导致引擎编译过程极不稳定,甚至崩溃。DDC的设计初衷是本地高速访问。
  • 预留充足空间:即使迁移到了大容量硬盘,也要定期关注缓存文件夹的大小。一个大型项目的DDC超过100GB是很常见的。确保目标驱动器有足够的剩余空间(建议至少保留50-100GB余量)。

4.2 共享缓存与团队协作

在团队中,我们可以更进一步,设置一个“共享派生数据缓存”(Shared DDC)。

  1. 搭建一个共享DDC服务器(高级):对于大型团队,可以搭建一个HTTP服务器来提供只读的共享DDC。团队成员本地的引擎在编译资源前,会先向这个服务器查询是否有可用的缓存,如果有就直接下载,从而避免每个人重复编译相同的资源(如公用的Megascans资产)。这需要额外的服务器配置,通常在大厂或大型项目中使用。
  2. 简单的团队共享:对于小团队,可以约定使用一个统一的绝对路径作为缓存目录(如DerivedDataCachePath=Z:\TeamProject\SharedDDC),并将该路径设置为一个所有成员都能访问的网络驱动器或共享文件夹。但请注意:这要求该共享位置具有极低的延迟和极高的稳定性,否则弊大于利。更安全的做法是,每个人使用本地路径,但通过版本控制系统同步DefaultEngine.ini配置文件,确保路径结构一致即可。

4.3 定期清理与维护

缓存不会无限增长,引擎有自身的清理机制,但了解手动管理方法很有必要。

  • 引擎内置清理:在编辑器菜单栏,点击“文件”(File)->“派生数据缓存”(Derived Data Cache)->“探索缓存…”(Explore Cache…),可以打开缓存目录。同菜单下还有“验证缓存…”(Verify Cache…)和“清理缓存…”(Clean Cache…)选项。“清理缓存”可以删除未被引用的旧缓存文件,比较安全。
  • 手动清理:最直接的方式就是关闭所有引擎进程后,直接删除整个DerivedDataCache文件夹。下次启动引擎时,它会根据需要重新生成缓存,这会导致首次打开项目或编译着色器时时间变长,但能彻底释放空间。建议在项目重大版本更新(如引擎升级、主要资产库更换)后进行一次手动清理。
  • 自动化脚本:你可以编写一个简单的批处理脚本,在每天关机或每周固定时间,自动删除超过30天的缓存文件。这需要一些Windows命令行的知识。

5. 疑难杂症与故障排除实录

迁移过程中或之后,你可能会遇到一些问题。这里记录了一些常见情况及其解决方案。

5.1 迁移后引擎启动报错或无法找到缓存

  • 症状:启动项目时,引擎卡在加载界面,或弹出错误提示,提到无法访问DerivedDataCache。
  • 排查步骤
    1. 检查路径权限:确保你设置的缓存路径(如D盘下的某个文件夹)具有完整的读写权限。可以尝试手动在该路径下新建一个文件夹,看是否成功。
    2. 检查路径格式:在DefaultEngine.ini中,路径使用正斜杠/或反斜杠\均可,但建议使用正斜杠/,因为它在所有平台上(Windows/Mac)都兼容。避免使用中文或特殊字符。
    3. 检查配置文件是否生效:在编辑器中,打开“项目设置”(Project Settings)->“平台”(Platforms)->“Windows”->“高级”(Advanced),找到“派生数据缓存”(Derived Data Cache)设置项,查看“派生数据缓存根目录”(Derived Data Cache Root)是否已经变成了你设置的新路径。这是最直接的验证方式。
    4. 回退验证:临时注释掉DefaultEngine.ini中添加的DerivedDataCachePath行(在行首加;),重启引擎,看是否能正常启动。如果能,说明问题出在你的新路径配置上。

5.2 迁移后编译速度变慢

  • 症状:首次打开项目、编译着色器或构建光照时,速度比迁移前更慢。
  • 可能原因与解决
    • 全新缓存:如果你在迁移后手动删除了旧缓存,或者新路径是一个空文件夹,那么引擎需要从头编译所有资源,这是正常的。慢只发生在第一次,后续就会快起来。
    • 硬盘速度慢:如果你将缓存路径迁移到了一个机械硬盘(HDD)上,速度肯定会比在C盘的SSD上慢。解决方案:将缓存路径改到一个SSD硬盘上。
    • 杀毒软件干扰:某些实时杀毒软件可能会扫描缓存文件夹的每一次读写操作,造成严重延迟。解决方案:将你的UE项目文件夹和缓存文件夹添加到杀毒软件的信任区或排除列表。

5.3 团队中部分成员配置不生效

  • 症状:提交了DefaultEngine.ini后,其他成员更新下来,但缓存路径还是指向他们的C盘。
  • 排查步骤
    1. 检查文件冲突:确认团队成员本地的DefaultEngine.ini没有未提交的修改,或者存在合并冲突。
    2. 检查只读属性:确保从版本控制系统更新下来的DefaultEngine.ini文件不是只读状态。
    3. 检查覆盖优先级:提醒团队成员,如果他们之前通过快捷方式参数(-ddc)或系统环境变量设置过缓存路径,这些设置的优先级可能高于项目配置文件。需要他们移除那些全局设置,让项目配置生效。

5.4 如何彻底清除C盘旧缓存

在确认新缓存路径工作稳定一段时间(比如一两周)后,你可以安全地删除C盘上的旧缓存以释放空间。

  1. 完全关闭Epic Games Launcher和所有虚幻编辑器进程。
  2. 直接删除C:\Users\[你的用户名]\AppData\Local\UnrealEngine\Common\DerivedDataCache文件夹。
  3. (可选)你也可以删除C:\Users\[你的用户名]\AppData\Local\UnrealEngine\下的其他版本缓存文件夹(如UE_4.27UE_5.0等),但请注意这些可能包含其他版本项目的缓存。

6. 进阶技巧:环境变量与自动化脚本

对于追求极致效率或需要管理多引擎版本、多项目环境的开发者,还有更高级的玩法。

6.1 使用系统环境变量

你可以在系统环境变量中定义一个变量,比如UE_DDC_ROOT=D:\UE_Cache,然后在DefaultEngine.ini中这样引用:

[Core.System] DerivedDataCachePath=%UE_DDC_ROOT%/%GAMEDIR_NAME%

这里,%GAMEDIR_NAME%是项目文件夹的名字。这样,每个项目的缓存会自动存放在D:\UE_Cache\MyAwesomeGame下,既集中管理,又相互隔离。这种方法特别适合那些项目文件夹经常移动位置的开发者。

6.2 编写项目初始化脚本

对于团队,可以编写一个Python或PowerShell脚本,作为新成员拉取项目代码后的“环境初始化”步骤。这个脚本可以:

  • 检查并创建指定的缓存目录。
  • 自动生成或修改DefaultEngine.ini文件,写入团队约定的缓存路径。
  • 设置必要的符号链接(如果采用方案三)。
  • 将项目目录添加到杀毒软件排除列表。 这能确保团队每个成员的环境从起点就是一致和优化过的。

将UE4/5的缓存路径从C盘迁移出去,是一个投入半小时,受益整个项目周期的关键优化。它不仅仅是解决空间问题,更是对开发环境的一次规范化治理。从我经历过的多个项目来看,这项优化能显著减少因磁盘空间导致的构建失败,提升大资源项目的打开速度,并为团队协作扫清一个潜在的环境差异点。最关键的是,一旦你按照“项目配置文件”的方式设置好,这个好习惯就会随着项目代码一起传播给每一个协作者。

最后分享一个我自己的小习惯:我通常会在项目目录的Saved文件夹旁边,单独创建一个_LocalCache文件夹,里面存放DDC和一些其他的本地临时文件。然后在.gitignore中忽略整个_LocalCacheSaved文件夹。这样,整个项目的“可变状态”都清晰地隔离在一边,项目根目录非常干净,非常适合版本管理。当你下次再看到C盘飘红时,希望这份指南能帮你从容应对。

← 返回列表