目录说明与缓存策略
收藏
我的收藏在开发游戏的过程中,会涉及部分文件读写操作,本文对抖音Unity小游戏的目录管理及磁盘管理机制进行讲解。
目录划分
在游戏开发角度,抖音Unity小游戏对游戏文件目录进行以下划分:
游戏文件目录
游戏文件 目录是游戏的主体文件存放目录,该目录包含游戏在启动后下载的资源文件、apk中解压出来的资源文件、Unity的Shader缓存等内容;
游戏文件目录一般情况下不会被主动清理,但在游戏总磁盘占用过大,或者长期未玩等情况时,仍有可能触发清理操作,此后玩家再次打开该游戏会触发重新下载的操作;
游戏文件目录的存储上限为1GB;
注意,存储上限1GB,不代表所有的资源总大小需要在1GB以内,而是需要确保玩家在游戏过程中单个场景所需要的总资源大小在1GB以内即可;Unity小游戏会在达到存储上限时,根据资源引用,淘汰掉未使用的本地资源,腾出磁盘空间;
游戏临时目录
游戏临时目录,是游戏存放当次运行需要的临时文件的目录。该目录会在游戏未使用时,随时清空。请不要在该目录中放置任何重要的数据文件,以免丢失导致玩家损失。
临时目录没有存储上限;但是注意,一旦游戏退出,随时可能会被清空。
玩家数据目录
玩家数据目录,是用于放置用户需要长期存储的数据资产的,主要用于放存档文件。游戏存档目录不会被磁盘清理机制所清理,会长期保留在磁盘上。
开发者无法直接获得玩家数据目录的路径,而是可以通过StarkSDK提供的Save/Load接口对数据对象进行存取操作,存取的结果会保存在玩家数据目录中;具体用法可以参考StarkSDK_Unity文档 ;
玩家数据目录的存储上限为50M,如果达到上限,写入操作会失败,可以使用提供的配套接口删除不需要的存档文件;
磁盘清理规则
为了优化用户的磁盘占用,减少宿主的负向反馈,抖音Unity小游戏对于游戏的磁盘占用有一套动态的管理机制,以下进行说明:
清理划分
磁盘清理从影响的范围角度,可以划分为:
- 1.清空临时目录:只对游戏临时目录进行清理;
- 2.磁盘缩减:保留游戏的核心文件,只清理“可恢复”的文件;用户下次打开时,不会触发游戏下载界面,直接进入游戏(游戏进入后可能会有游戏内的资源下载);影响游戏文件目录和临时目录;
- 3.删除游戏:只保留玩家数据目录的内容,清理其它游戏相关目录;用户下次打开时,会触发游戏的重新下载;
清理时机
- 1.清空临时目录
在游戏退出后,随时可能会触发清空临时目录的操作。此外在其它磁盘清理操作时,都会顺便清理下临时目录;
- 2.磁盘缩减
Unity小游戏会定期进行检查,在游戏磁盘总占用超过280M时,触发磁盘缩减;此外,宿主app在发现磁盘总占用较高时,也会触发小游戏进行磁盘缩减;最后,玩家在宿主中退出当前账号时,也会触发磁盘缩减;
- 3.删除游戏
Unity小游戏支持同时持久化5款游戏,当超过上限时,会根据LRU算法,找到最早被打开的游戏,进行删除;此外,如果游戏长时间(14天)没有再被打开过,也会触发游戏删除操作。
- 4.其它清理时机
除了以上的主动磁盘管理,如果玩家删除宿主,也会导致Unity小游戏的所有磁盘占用被清理。