Unity3d:缓存服务器
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
缓存服务器
重要提示:缓存服务器仅支持资源导入管线版本 1。如果您使用资源导入管线版本 2,请改用 Unity 加速器。
Unity 具有完全自动化的资源管线。每当修改源资源(如.psd或 .fbx 文件)时,Unity 都会检测到更改并自动重新导入。从文件中导入的数据随后由 Unity 以内部格式存储。
这种安排旨在使工作流程对单个用户尽可能高效和灵活。但是,在团队中工作时,您可能会发现其他用户可能会不断对资产进行更改,所有这些更改都必须导入。此外,在桌面和移动构建目标平台之间切换时,必须重新导入资产。因此,对于大型项目,切换可能需要很长时间。
在缓存服务器上缓存导入的资产数据可大大减少导入资产所需的时间。
Unity 根据以下条件缓存每个资源导入:
- 资产文件本身
- 导入设置
- 资源导入程序版本
- 当前平台
如果上述任何更改,Unity 将重新导入资源。否则,Unity 会从缓存服务器下载它。
使用缓存服务器时,您甚至可以在多个项目之间共享资源导入(即,导入工作在一台计算机上完成,结果与其他计算机共享)。
注意:设置并启用缓存服务器后,此过程是完全自动的,因此没有其他工作流要求。它减少了导入项目所需的时间,而无需用户的进一步干预。
启用缓存服务器
要启用缓存服务器:
- 打开“Unity 首选项”窗口(从主菜单:MacOS 上的 Unity > 首选项或 Windows 和 Linux 上的“编辑>首选项”)。
- 从左侧的类别列表中选择资产管线。Unity 加速器(缓存服务器)设置显示在右侧的详细信息窗格中。
- 从缓存服务器模式下拉框中选择远程或本地。将显示所选模式特有的属性。
- 为所选模式设置“缓存服务器”首选项。
提示:如果可能,由于硬盘驱动器大小限制,最好将缓存服务器托管在单独的计算机上。
注意:如果您的本地缓存服务器具有自定义位置,并且该位置变得不可用,Unity 将显示以下警告:
本地缓存目录不存在 - 请检查您是否可以访问缓存文件夹并能够写入它
以管理员身份设置缓存服务器
管理员需要设置托管缓存资产的缓存服务器计算机。
要在远程服务器上设置缓存服务器:
- 下载缓存服务器:
- 打开 Unity 的“下载存档”页面。
- 找到您正在使用的 Unity 版本,然后单击目标服务器操作系统的“下载”按钮。
- 单击缓存服务器链接开始下载。
- 解压缩文件,如下所示:
3. 运行与您的操作系统匹配的命令脚本。 将出现一个终端窗口,指示缓存服务器正在后台运行:
重要:缓存服务器需要位于具有非常大存储空间的可靠计算机上(远大于项目本身的大小,因为将存储多个版本的导入资源)。如果硬盘已满,缓存服务器可能会运行缓慢。
将缓存服务器安装为服务
提供的和.sh.cmd
脚本
必须设置为服务器上的服务。 缓存服务器可以随时安全地终止和重新启动,因为它使用原子文件操作。
新旧缓存服务器
默认情况下启动两个缓存服务器进程。旧版缓存服务器适用于 5.0 版之前的 Unity 版本。新的缓存服务器适用于 5.0 及更高版本的 Unity。有关配置、启用和禁用两个不同缓存服务器的详细信息,请参阅下面的缓存服务器配置。
缓存服务器配置
如果只是从执行脚本开始,它将在端口 8125 上启动旧版缓存服务器,并在端口 8126 上启动新的缓存服务器。它还在与脚本相同的目录中创建“cache”和“cache5.0”目录,并将数据保存在其中。默认情况下,允许缓存目录增长到 50 GB。您可以使用命令行选项配置数据的大小和位置,如下所示:
./RunOSX.command --path ~/mycachePath --size 2000000000
或
./RunOSX.command --path ~/mycachePath --port 8199 --nolegacy
您可以使用以下命令行选项配置缓存服务器:
- 用于指定服务器端口。这仅适用于新的缓存服务器。默认值为 。
--port8126
- 用于指定缓存位置的路径。这仅适用于新的缓存服务器。默认值为 。
--path./cache5.0
- 用于指定缓存位置的路径。这仅适用于旧版缓存服务器。默认值为 。
--legacypath./cache
- 用于指定两个缓存服务器的最大缓存大小(以字节为单位)。当超过缓存大小时,最近未使用的文件将自动丢弃。
--size
- 用于停止旧版缓存服务器启动。否则,旧版缓存服务器将在端口 上启动。
--nolegacy8125
托管缓存服务器的计算机的要求
为了获得最佳性能,必须有足够的 RAM 来容纳整个导入的项目文件夹。此外,最好拥有一台具有快速硬盘驱动器和快速以太网连接的计算机。硬盘驱动器还应有足够的可用空间。另一方面,缓存服务器的 CPU 使用率非常低。
缓存服务器和版本控制
是其缓存的数据始终可以在本地重建。它只是提高性能的工具。因此,通过互联网使用缓存服务器是没有意义的。如果您有分布式团队,则应在每个位置放置一个单独的缓存服务器。
缓存服务器在 Linux 或 Mac OS X 计算机上以最佳方式运行。Windows 文件系统对于缓存服务器存储数据的方式没有特别优化,Windows 上的文件锁定问题可能会导致在 Linux 或 Mac OS X 上不会出现的问题。
缓存服务器常见问题解答
随着越来越多的资源被导入和存储,缓存服务器数据库的大小是否会无限增长?
缓存服务器会自动删除一段时间未使用的资产(当然,如果再次需要这些资产,则会在下次使用时重新创建它们)。
缓存服务器是否仅适用于资产服务器?
缓存服务器旨在对源/版本控制系统透明,因此您不限于使用 Unity 的资产服务器
.
哪些更改会导致重新生成导入的文件?
当 Unity 即将导入资源时,它会生成所有源数据的 MD5 哈希。
对于纹理,这包括:
- 源资源:“我的纹理.psd”文件
- 元文件:“myTexture.psd.meta”(存储所有导入器设置)
- 纹理导入程序的内部版本号
- 所有资产后处理器的版本号哈希
如果该哈希与缓存服务器上存储的哈希不同,则会重新导入资产。否则,将下载缓存的版本。客户端 Unity 编辑器仅在需要时从服务器中提取资源 - 资源不会在更改时推送到每个项目。
如何使用资产依赖项?
缓存服务器不处理依赖项。Unity 的资源管道不处理依赖关系的概念。它的构建方式是为了避免资产之间的依赖关系。类是一种常用技术,用于自定义资产导入程序以满足您的需求。例如,您可能希望将网格碰撞体添加到某些游戏对象
在基于其名称或标记的 .fbx 文件中。
引入依赖项也很容易使用。例如,您可以使用资产旁边的文本文件中的数据向导入的游戏对象添加其他组件。这在缓存服务器中不受支持。如果要使用缓存服务器,则必须删除对项目文件夹中其他资产的依赖。由于缓存服务器对后处理器中的依赖项一无所知,因此它不知道有任何更改,因此使用资产的旧缓存版本。AssetPostprocessor
实际上,您可以通过多种方式进行资产后处理,以便与缓存服务器很好地配合使用。您可以使用:
- 导入资源的路径
- 资源的任何导入设置
- 源资产本身,或从中生成的任何数据在资产后处理器中传递给您。
使用材质时是否有任何问题?
修改已存在的材质可能会导致问题。使用缓存服务器时,Unity 会验证是否保留了对材质的引用,但由于未调用任何后处理调用,因此在通过缓存服务器导入模型时无法更改材质的内容。因此,在使用和不使用缓存服务器进行导入时,可能会得到不同的结果。
不要从资源后处理器修改磁盘上已存在的材质,因为如果通过缓存服务器下载 fbx 文件,则不会为其运行导入过程。因此,如果您依赖于在每次模型导入器运行时将生成的材质重置为某些生成的默认值,则在导入缓存的 fbx 文件时不会运行此资源后处理器。
是否有任何资产类型未被服务器缓存?
有几种资产数据是服务器不缓存的。缓存脚本文件实际上没有任何好处,因此服务器会忽略它们。此外,3D 建模软件(Autodesk Maya®、Autodesk®® 3ds Max® 等)使用的本机文件也会使用应用程序本身转换为 FBX。资源服务器不会缓存本机文件,也不会缓存在导入过程中生成的中间 FBX 文件。但是,可以通过从建模软件将文件导出为 FBX,然后将其添加到 Unity 项目中,从服务器中受益。
3D建模学习工作室整理翻译,转载请标明出处!