使用Unity Cache Server提高效率

avatar
avatar
kktoo
45
文章
12
评论
2021年1月20日19:04:28 评论 5,500 3616字阅读12分3秒

1 简介

Unity Cache Server,翻译过来就是Unity缓存服务器

1.1 缓存服务器の官方介绍

Unity 有一个完全自动的资源管线。每当修改 .psd 或 .fbx 文件等源资源时,Unity 都会检测到更改并自动将其重新导入。随后,Unity 以内部格式存储从文件导入的数据。

这种安排旨在使工作流程对于个人用户而言尽可能高效和灵活。但是,在团队中工作时,可能会发现其他用户可能会继续对资源进行更改,所有这些更改都必须导入。此外,在桌面和移动构建目标平台之间切换时,必须重新导入资源。因此,该切换对于大型项目而言可能需要很长时间。

在__缓存服务器__上缓存导入的资源数据可以大大减少导入资源所需的时间。

Unity 在每次导入资源时基于以下内容进行缓存:

  • 资源文件本身
  • 导入设置
  • 资源导入器版本
  • 当前平台

如果以上任何内容更改,Unity 都会重新导入资源。否则,Unity 从缓存服务器下载资源。

使用缓存服务器时,甚至可以跨多个项目共享资源导入(即,在一台计算机上完成导入工作,结果将与其他计算机共享)。

1.2 说人话

缓存服务器把项目资产缓存在服务器上,实现快速切换和共享:

当项目切换目标平台时,本地不用花时间转换,直接从服务器上拷贝下来用 ;-)

当其他同事新增了资源,本地不用花时间转换,直接从服务器上拷贝下来用 ;-)

2 缓存的原理分析

2.1 导入的过程

项目中所使用的资产,如模型、贴图、材质、声音、视频等等,这些资产在导入项目时,Unity会进行一系列的处理,而这些处理结果往往是不纳入版本管理范围的

  • 生成对应的.meta文件,meta文件保存了资产之间的引用关系。
  • 生成对应的设置,这些设置信息存放在ProjectSettings文件夹中。
  • 引用的包信息存放在Packages文件夹中。
  • 将一些资源转换后存放在Library文件夹中。
  • 部分缓存信息存放在obj文件夹和Temp文件夹中。

2.2 目标平台的快速切换

当我们的资产导入到Unity时,这些资产本身并没有被改变,Unity会根据不同的目标平台,进行不同的处理后新生成一些文件,这些文件放置到Library文件夹中,当我们的目标平台发生变化时,Library中的文件就需要重新处理后重新生成。

根据以上分析,当我们切换目标平台时,改变的内容主要是Library文件夹。以此为例,如果我们把Library文件夹创建多个副本放入仓库中,比如Android的放一个,IOS的放一个,Windows的放一个。那么当我们切换目标平台时,就不需要再花费时间进行资产转换,我们直接从仓库里拷贝对应目标平台的副本过来就好了。这就是缓存的思路,Cache Server就是这个仓库。

2.3 资产共享

同理,当开发人员张三增加了新的资产,张三的Unity已经处理过了该新增资产。当开发人员李四更新项目代码后,完全没必要再花时间处理新增资产,直接从仓库里拷贝处理后的文件,就可以直接使用了。

这个共享可以在同一项目的不同主机之间发生,也可以在不同项目之间发生。

当然,Cache Server也自带了缓存更新,网络连接等功能。

3 部署Cache Server

3.1 硬件性能要求

选择内存大、硬盘速度快、有网络的主机。

操作系统优先选择,MacOS/Linux优先于Windows系统。

3.2 准备NodeJS环境

下载NodeJS,不要太高的版本,紧跟Unity官方的要求,现在是v12.13.1 LTS版本(当前时间2021年1月)。

下载地址:https://nodejs.org/en/blog/release/v12.13.1/ 或者 https://nodejs.org/en/download/

安装完成后,命令行运行 node -v ,若显示了node的版本号,则证明安装成功。

3.3 下载安装Cache Server

从npm仓库安装

npm install unity-cache-server -g

安装完成后,命令行运行unity-cache-server -V,若显示了Cache Server的版本号,则证明安装成功。

unity-cache-server -V

安装过程如下图所示:

使用Unity Cache Server提高效率

3.4 启动Cache Server服务

在npm安装目标目录下,会有启动脚本,windows系统下就是批处理文件,mac等系统下就是shell脚本。

比如在mac系統下:

在shell窗口输入启动命令:unity-cache-server 参数,如果没有参数,就直接输入

unity-cache-server

就可以启动服务:

Cache path is /usr/local/lib/node_modules/unity-cache-server/.cache_fs
(node:1175) ExperimentalWarning: The fs.promises API is experimental
Cache Server version 6.4.0; Cache module is cache_fs
Cache Server ready on 0.0.0.0:8126

如果有其他主机通过remote方式连接,还会有连接信息:

Cache path is /usr/local/lib/node_modules/unity-cache-server/.cache_fs
(node:1175) ExperimentalWarning: The fs.promises API is experimental
Cache Server version 6.4.0; Cache module is cache_fs
Cache Server ready on 0.0.0.0:8126
192.168.88.3:16281 connected.
192.168.88.3:16281 Closed connection.

比如windows系统下:

npm目录路径一般为:C:\Users\Administrator\AppData\Roaming\npm

如下图所示:

使用Unity Cache Server提高效率

在此文件夹下有unity-cache-server.cmd文件,双击运行,出现一个命令行窗口,窗口出现 Cache Server Ready On 字符串, 则表示Cache Server 服务器启动成功,已进入待命状态。

使用Unity Cache Server提高效率

注意此命令行窗口不能关闭,关闭则会停止Cache Server服务

如果希望Cache Server开机自动启动并在后台运行,可以设置为Windows服务开机自动运行。具体方法有很多在线教程,请自行百度谷歌。

3.5 设置Unity启用Cache Server

在Unity编辑器菜单中设置,

Edit->Preferences->Cache Server中,

使用Unity Cache Server提高效率

3.5.1 设置模式

有三个选项:

  • Local: 缓存至本地
  • Remote:缓存至远程
  • Disable: 禁用

如果Cache Server就搭建在本机上,就选择Local,如果在其他主机上,就选择Remote。

选择Remote需要配置IP,输入对应的Server IP后,点击Check Connection 即可。

Remote一般都认为是局域网,远程的话速度堪忧。

3.5.2 自定义Cache目录

Cache默认目录大概长这样:

C:\Users\Administrator\AppData\Roaming\npm\node_modules\unity-cache-server\.cache_fs

如果不自定义目录,默认都在系统分区下。Cache目录会很大,强烈建议放在非系统分区。

使用Unity Cache Server提高效率

3.5.3 设置最大存储空间

设置最大空间Maximum Cache Size(GB),注意单位是GB,默认值是10G。

Cache文件夹的占据空间不会一直增长下去,当达到最大空间限制时,Cache Server会自动删除资源,优先删除长期没有使用的资源。

3.6 测试体验

选择一个项目,试一试效果吧,来回切换目标平台,不出意外的话,你会发现比以前快了很多。

切换到首次使用的目标平台时,仍然需要进行资源转换,因为Server上还没有缓存,等首次资源转换完毕上传了Server,以后就快了。

上传了缓存后,我们可以发现Cache目录下多了很多文件夹。如下图所示:

使用Unity Cache Server提高效率

切换目标平台时,我们会看到进度提示,正在从Cache Server下载和导入。如下图所示:

使用Unity Cache Server提高效率

4 FAQ

1.资源的哪些更改导致导入文件会重新生成?

当导入一个资源时,会生成所有源数据的MD5哈希值
所以当MD5值不同时会重新导入,否则从Cache Server下载

2.如何处理资源的依赖项?
Cache Server不处理依赖项。

3.不被CacheServer缓存的资源类型?
脚本文件,3D建模软件(maya、3Dmax、等)生成的本地文件,FBX文件

5 参考资料

官方指南:https://github.com/Unity-Technologies/unity-cache-server

官方介绍:https://docs.unity3d.com/cn/current/Manual/CacheServer.html

 

avatar
  • 文本由 发表于 2021年1月20日19:04:28
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Unity打开项目时目标平台被改变 Unity

Unity打开项目时目标平台被改变

现象: 我的项目已经是切换到目标平台为Android的项目,每天工作过程中会多次打开关闭该项目,但是总有偶然的几率,会出现打开项目以后,目标平台自动被切换为Windows,然后就开始忙碌于读取资源转换...
用Unity开发App(一)关于UIWidgets Unity

用Unity开发App(一)关于UIWidgets

一、为什么会想到用Unity开发App 这几年一直在用Unity做游戏,技术栈都集中在这个方向上,偶尔尝鲜其他技术也还是游戏引擎如白鹭等。 讲道理,我原生app的开发能力也就掌握到接sdk的程度,做一...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: