UnityのDouyinミニゲームでローカルデータの最新の保存方法を共有

Douyin Mini Game は、Douyin プラットフォームに基づいて開発された小規模なゲームで、従来のアプリとは異なり、Douyin クライアント内で実行され、Douyin の共有、レコメンデーションなどの機能を通じて拡散することができます。Douyin ミニゲームの開発プロセスにおいて、ファイル ストレージ システムは非常に重要なコンポーネントであり、この記事では、Douyin ミニ ゲーム ファイル ストレージ システムの実装原理と使用方法を詳しく紹介します。

1. TikTok Mini ゲーム ファイル ストレージ システムの背景

公式ドキュメント:新しいファイル システムの使用手順(
以下を含む)

  • 新しいファイルシステムの背景
  • 既存のアーカイブ ファイルの移行方法:
  • データ比較: 古いファイルシステムで約 400MB のファイルを書き込んだ後、ゲームを開いた後、ゲームは約 1G のメモリを占有しますが、移行後は基本的にメモリを占有しなくなり、ゲームのメモリは約 630MB になります。

元の実装では、などの C# 標準ファイル インターフェイスは、File.ReadAllText、File.WriteAllText、FileStreamメモリ ファイル システムにデータを書き込み、適切なタイミングでメモリ データを IndexedDB に自動的に同期して保存します。IndexedDB ファイルストレージシステムの使用により、ランタイムメモリがある程度増加しているため、ファイル数が多すぎるとクラッシュが発生する可能性があります。

また、IndexedDB ファイルストレージシステムの互換性が十分ではなく、一部の iOS システムでは正常に使用できず、ゲームに正常に参加できなくなる場合があります。StarkFileSystemManagerそこで、代替としてインターフェイスを提供し、開発者はStarkSDKSpace.StarkSDK.API.GetStarkFileSystemManager()メソッドを呼び出すことで新しいファイル ストレージ システムを使用できるようになります。


2. ファイルストレージシステムの使用方法

2.1 初期化

ファイル システムを使用するときは、習慣的に初期化を実行します。まず、ファイル システム マネージャー オブジェクトを取得しStarkFileSystemManager、次にユーザー データ ストアへのパスを取得する必要がありますStarkFileSystemManager.USER_DATA_PATH

後続のファイル関連の操作は、2 つの変数に基づいて実行する必要があります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 ディレクトリを作成する

ディレクトリを作成するには、同期と非同期の 2 つの方法があります。

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

dyFileSystem.MkdirSync(dicPath, false);

  • 最初のパラメータは、作成されたディレクトリ パスを示します。注意: アドレスは、ルート ディレクトリとして上記で取得した dyFilePath を使用する必要があります。
  • 2 番目のパラメータは、ディレクトリの親ディレクトリを再帰的に作成した後にディレクトリを作成するかどうかを示します。対応する上位ディレクトリがすでに存在する場合、上位ディレクトリは作成されません。

サンプルコード:

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. ファイルへの書き込みでは、同期および非同期メソッドだけでなく、文字列またはバイト配列も
    書き込むことができます。stringbyte[]
  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);

  • 最初のパラメータは、ディレクトリ/ファイルのパスを削除することを意味します。
  • 2 番目のパラメータは、ディレクトリを再帰的に削除するかどうかを示します。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 その他の関連操作

ファイルのコピー: こちらも同期と非同期の2つの方法があり、使い方は基本的に上記と同じです

ファイルの名前を変更します。


3、まとめ

Douyin ミニ ゲーム ファイル ストレージ システムは、ミニ ゲームのデータを保存および管理するためのシンプルで信頼性の高い方法を提供する非常に重要なコンポーネントです。このファイル ストレージ システムは、テキスト、JSON、バイナリなどのデータの保存と読み取りをサポートし、データの保存とアクセスを実現するためのさまざまな API を提供します。

Douyin ミニ ゲームを開発する場合、Douyin ミニ ゲーム ファイル ストレージ システムを使用してデータを保存し、データにアクセスできるため、ミニ ゲームのパフォーマンスとユーザー エクスペリエンスが向上します。

おすすめ

転載: blog.csdn.net/Czhenya/article/details/131419423