Unity 之 抖音小游戏本地数据最新存储方法分享

本文详细介绍了抖音小游戏的文件存储系统,包括其背景、使用方法和关键操作,如初始化、创建目录、存储和删除数据。通过使用新文件系统,可以解决内存占用和兼容性问题,提升游戏性能。
摘要由CSDN通过智能技术生成

抖音小游戏是一种基于抖音平台开发的小型游戏,与传统的 APP 不同,抖音小游戏运行在抖音客户端内部,可以通过抖音的分享、推荐等功能进行传播。在抖音小游戏开发过程中,文件存储系统是一个非常重要的组成部分,本文将详细介绍抖音小游戏文件存储系统的实现原理和使用方法。

一、抖音小游戏文件存储系统背景

官方文档:使用新文件系统说明
内容包括了:

  • 新文件系统的背景
  • 已有存档文件迁移方法:
  • 数据对比:在老文件系统上写入约400MB的文件后,打开游戏后占用内存约1G,在迁移后则基本不会再占用内存,游戏内存将至630MB左右

在原有实现中,C#标准的文件接口,如File.ReadAllText、File.WriteAllText、FileStream等,是将数据写入到内存文件系统,然后再在合适的时机自动同步内存数据到IndexedDB中存储。由于采用了IndexedDB文件存储系统,使得运行时内存有一定的增加,如果文件数量过多,可能会发生闪退。

另外,IndexedDB文件存储系统兼容性不够好,在部分iOS系统上会无法正常使用,从而导致无法正常进入游戏的情况。所以我们提供 StarkFileSystemManager接口作为替换,开发者可以通过调用StarkSDKSpace.StarkSDK.API.GetStarkFileSystemManager()方法来使用新的文件存储系统。


二、文件存储系统的使用方法

2.1 初始化

在使用文件系统时,我会习惯性的做一个初始化:首先需要获取文件系统管理器对象StarkFileSystemManager,然后获取到一个用户数据存储的路径StarkFileSystemManager.USER_DATA_PATH

后面的文件相关操作都要在 dyFileSystemdyFilePath 两个变量的基础上进行操作。

初始化参考代码如下:

using StarkSDKSpace;

public class StarkSDKTest : MonoBehaviour
{
    // 抖音存储文件系统
    private StarkFileSystemManager dyFileSystem;
    // 用户数据存储的路径
    private string dyFilePath;
    
    void Start()
    {
        dyFileSystem = StarkSDK.API.GetStarkFileSystemManager();
        dyFilePath = StarkFileSystemManager.USER_DATA_PATH;
    }
}

2.1 创建目录

创建目录有同步和异步两种写法:

同步方法:MkdirSync(string dirPath, bool recursive = false);

dyFileSystem.MkdirSync(dicPath, false);

  • 第一个参数表示:创建的目录路径,注意:地址要以上面获取的 dyFilePath 作为根目录。
  • 第二个参数表示:是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。

示例代码:

void CreateDic(string dicPath)
{
    // 判断文件是否存在
    if (!dyFileSystem.AccessSync(dicPath))
    {
        string isSucc = dyFileSystem.MkdirSync(dicPath, false);
        Debug.Log($"创建目录成功状态:{isSucc} 为空,则表示创建成功");
    }
    else
    {
        Debug.Log($"已经存在此目录:{dicPath}, 无需再次创建");
    }
}

异步方法 Mkdir(MkdirParam param)

参数与同步方法一致,可添加创建成功或失败回调。

void CreateDicAsync(string dicPath)
{
    if (!dyFileSystem.AccessSync(dicPath))
    {
        MkdirParam param = new MkdirParam();
        param.dirPath = dicPath;
        param.recursive = false;
        param.fail = delegate(StarkBaseResponse response)
        {
            Debug.Log($"异步创建目录失败,失败原因: errCode:{response.errCode} , errMsg:{response.errMsg}");
        };
        param.success = response =>
        {            
            Debug.Log($"异步创建目录成功,执行成功回调。");
        };
        dyFileSystem.Mkdir(param);
    }
    else
    {
        Debug.Log($"已经存在此目录:{dicPath}, 无需再次创建");
    }
}

若创建失败,则可根据errMsg进行修改,若不清楚如何修改可以使用errCode和官方文档进行比较。

官方文件系统文档地址


2.3 存储数据

涉及知识点:

  1. 写入文件
    可以写入字符串 string 或者 字节数组byte[]两种类型,也有同步异步两种方式。
  2. 读取文件
    写入时用的什么类型存储,读取时就使用使用类型。字符串方式写入默认编码格式为utf8
  3. 校验文件/目录是否存在

同步写法参考代码如下:

/// <summary> 
/// 存储数据
///     --> 不存在,创建并写入
///     --> 已存在,读取并写入
/// PS:地址要以上面获取的 dyFilePath 作为根目录,后面则可自行创建
/// </summary>
/// <param name="filePath">文件存储地址</param>
/// <param name="fileContext">文件存储内容</param>
void CreateFile(string filePath, string fileContext)
{
    if (!dyFileSystem.AccessSync(filePath))
    {
        string isSucc = dyFileSystem.WriteFileSync(filePath, fileContext, "utf8");
        Debug.Log($"创建文件成功状态:{isSucc} 为空,则表示创建成功");
    }
    else
    {
        // 读取并写入 --> 注意编码格式与创建一致
        string readContext = dyFileSystem.ReadFileSync(filePath, "utf8");
        Debug.Log($"读取文件内容:{readContext}");
        string isSucc = dyFileSystem.WriteFileSync(filePath, readContext + fileContext);
        Debug.Log($"读取并写入:{filePath}, 无需再次创建");
    }
}

2.4 删除目录/文件

dyFileSystem.RmdirSync(delPath, false);

  • 第一个参数表示:删除目录/文件的路径。
  • 第二个参数表示:是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。为false则删除指定目录/文件。
// 删除文件/目录
void DeleteFileOrDic(string delPath)
{
    if (dyFileSystem.AccessSync(delPath))
    {
        // 第二个参数表示:是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件
        string isSucc = dyFileSystem.RmdirSync(delPath, false);
        Debug.Log($"删除文件/目录成功状态:{isSucc} 为空,则表示删除成功");
    }
    else
    {
        Debug.Log($"不存在此文件/目录:{delPath}, 无需删除");
    }
}

2.5 其他相关操作

复制文件:也同样有同步和异步两种方法,使用方式和上面基本一致

重命名文件:


三,小结

抖音小游戏文件存储系统是一个非常重要的组成部分,它提供了一种简单、可靠的方式来存储和管理小游戏中的数据。此文件存储系统支持存储和读取文本、JSON、二进制等类型的数据,并提供了多种 API 来实现数据的存储和访问。

在开发抖音小游戏时,可以使用抖音小游戏文件存储系统来实现数据的存储和访问,从而提高小游戏的性能和用户体验。

Unity游戏发布到微信抖音小游戏可以按照以下步骤操作: 1. Unity版本选择:首先确保使用的是适配微信抖音小游戏Unity版本,比如2019.4.20f1,这个版本支持微信开放平台的运行时环境。 2. 安装插件:在Unity Asset Store中搜索并安装微信小游戏插件,例如"WeChat Mini Games SDK for Unity"。将插件导入项目中。 3. 导出项目:在Unity编辑器中,选择菜单栏中的"WeChat Mini Games"选项,点击"Export"按钮来导出小游戏项目。导出的结果将生成一个小游戏项目文件夹。 4. 开发者工具:下载并安装微信小游戏开发者工具或抖音小游戏开发者工具。微信小游戏开发者工具适用于发布到微信小游戏平台,抖音小游戏开发者工具适用于发布到抖音小游戏平台。 5. 创建小游戏项目:在微信小游戏开发者工具或抖音小游戏开发者工具中,使用"初始化项目"、"导入项目"等选项来创建一个新的小游戏项目,并选择Unity导出的项目文件夹。 6. 调试和发布:通过微信小游戏开发者工具或抖音小游戏开发者工具,进行项目的调试,检查游戏的运行状态和效果。调试通过后,点击发布按钮,将游戏发布到对应的小游戏平台上。 7. 提交审核:根据微信或抖音小游戏平台的要求,将提交发布后的小游戏进行审核。一旦通过审核,游戏将正式上线并可在微信或抖音上访问和玩耍。 以上是将Unity游戏发布到微信抖音小游戏的大致步骤,具体操作和流程可能会根据不同的Unity版本和开发者工具版本略有差异。建议在进行发布前,先了解相关平台的文档和开发者指南,以确保正确地完成发布过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈言必行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值