【Unity】Windows / Mac / Android / iOS でファイルダイアログを開く「NativeFileSO」

Unityで作成したゲームの設定ファイルをAndroidで読み書きしようとしたとき、ファイルダイアログを簡単に出す方法を見つけたのでご紹介。

「NativeFileSO」を Unity プロジェクトに導入することで、Windows / Mac / Android / iOS でファイルダイアログを開くことができる。

細かなカスタマイズはできないものの、簡単にマルチプラットフォーム対応でき、しかもネイティブのファイルダイアログを開くことができるようになるので、かなり便利だろう。

特にAndroidについては、Android Studioを使用して、ファイルダイアログ用のネイティブプラグインを別途作成する必要がなくなるので、Javaを知らなくても大丈夫。C#だけで、簡単にデータをインポート/エクスポートができるようになる。

GitHub - keiwando/nativefileso: Unity - Native file dialogs and file type associations on Windows, macOS, iOS and Android
Unity - Native file dialogs and file type associations on Windows, macOS, iOS and Android - keiwando/nativefileso

導入方法

  1. ここから最新のUnityPackageをダウンロードし、Unityプロジェクトにインストール
  2. Assets>NativeFileSO>Prefabs>NativeFileSOUnityEventプレハブを探す
  3. それのプレハブを、Unityプロジェクトで最初に読み込まれるシーンにドラッグ&ドロップするだけ

使い方

ファイルのエクスポート

C#
using Keiwando.NFSO;

static void Save(){
    string path = Application.persistentDataPath+ "/yourData.txt";
    string newFilename = "ExportedFile.txt";

    FileToSave file = new FileToSave(path, newFilename, SupportedFileType.PlainText);

    // ファイルダイアログが出現
    // pathがデフォルトだが、それ以外の場所にデータを保存することもできる
    NativeFileSO.shared.SaveFile(file);
}

ファイルのインポート

C#
using Keiwando.NFSO;

static void Load(){
    // 選択してほしいファイル形式を制限
    SupportedFileType[] supportedFileTypes = {
        SupportedFileType.PlainText
    };

    NativeFileSO.shared.OpenFile(supportedFileTypes,
      delegate (bool fileWasOpened, OpenedFile file) {
        if (fileWasOpened) {
            // ファイル選択が正常に行われたときの処理
            string path = Application.persistentDataPath + $"/{file.Name}";
            ...
        } else {
            // ファイル選択がキャンセルされたときの処理
        }
});

結果

WindowsとAndroidで問題なくファイルダイアログを出現させることを確認できた。

Androidでは、ファイルマネージャーアプリ(Files by Googleアプリ等)に対してファイルを共有することで、データを保存することができる。(ダウンロードフォルダにデータは保存された。)

コメント