Unity でテキストファイルを保存するシンプルなスクリプト

目的

この資料では、Unityでテキストファイルを保存する最小構成のコードを紹介します。Windowsやスマートフォン向けのアプリ(家庭用端末を想定)において、ユーザーのデータやログを保存したい場合に有用です。


特徴

  • 1ファイルで完結
  • Unity 6 対応
  • どのプラットフォームでも動作(自動で保存先を選択)
  • 呼び出しコード付きで、実行すれば即保存される

使用環境

  • Unity 2022.3 以降(Unity 6 含む)
  • Windows / Android / iOS 対応(Application.persistentDataPath 使用)

スクリプト全体

using System.IO;
using UnityEngine;

/// <summary>
/// アプリ起動時に自動でテキストファイルを保存するサンプル
/// </summary>
public class SimpleTextSaveExample : MonoBehaviour
{
    void Start()
    {
        SaveTextFile("output.txt", "これは保存されたテキストです。");
    }

    /// <summary>
    /// 指定されたファイル名と内容でテキストファイルを保存します
    /// </summary>
    void SaveTextFile(string fileName, string content)
    {
        string path = Path.Combine(Application.persistentDataPath, fileName);
        File.WriteAllText(path, content);
        Debug.Log("保存しました: " + path);
    }
}

思考時間: 1 秒

部分役割詳細
Application.persistentDataPath基準フォルダを取得– Unity が各 OS / ストア規定に従って用意する「書き込み安全」ディレクトリ- 例:  • Windows C:\Users\<User>\AppData\LocalLow\<Company>\<Product>\  • Android /storage/emulated/0/Android/data/<package>/files/  • iOS   …/Application/Library
fileName保存したいファイル名任意。拡張子付き "save.json" や "output.txt" など
Path.Combine(…, …)パス結合ユーティリティ– OSごとの区切り文字(Windows \, Unix /)を自動で挿入- 先頭に /や \ が入った場合の二重スラッシュ、手入力ミスを防止

なぜ必要?

  • 文字列連結 persistentDataPath + "/" + fileName も動くが、区切り文字を手で管理するとプラットフォーム間でバグが出やすい
  • Path.Combine は 「パスは OS に任せる」 という .NET 標準手法で、安全かつ可読性も高い

実際の出力例(Windows)

string path = Path.Combine(Application.persistentDataPath, "output.txt");
// "C:¥Users¥Alice¥AppData¥LocalLow¥MyCompany¥MyGame¥output.txt"

要するに 「保存先フォルダ」と「ファイル名」を、環境非依存で 1 本の完全パスへ整形 してくれる――それがこの 1 行の役目です。

思考時間: 2 ~ 3 秒

要素役割補足
File クラス.NET System.IO 名前空間の静的ユーティリティ低レベルのファイル I/O をラップ。インスタンス生成不要
WriteAllTextメソッド文字列をファイルに丸ごと書き込む– 引数で受け取った文字列を UTF‑8 (BOM なし) でエンコードして保存- ファイルが無ければ新規作成、あれば完全に上書き
path書き込み先のフルパス先に説明した Path.Combine() で生成
content保存する文字列データ例:スコア、設定、ログなど

動作フロー

  1. 存在確認
    内部で FileStream を開く際に、対象ファイルの有無をチェック。
  2. ストリーム取得
    無ければ空ファイルを作成して書込みモードでオープン。
  3. エンコード & 書込
    文字列 → UTF‑8 バイト配列に変換 → 全バイトをストリームへ出力。
  4. 自動クローズ
    内部 using 構造のおかげでストリームを確実に閉じリソース解放。

例外 (try / catch で捕捉可)

例外型主な発生要因
UnauthorizedAccessExceptionパスが読み取り専用/権限不足
DirectoryNotFoundExceptionディレクトリが存在しない
IOException他プロセスがロック中、ストレージ不足など
ArgumentExceptionパスが空文字・無効文字含む

主な使いどころ

  • セーブデータ・設定ファイルを手軽に保存
  • デバッグログを書き捨て形式で出力
  • 軽量な テキストベースのキャッシュ を作成

代替/関連 API

メソッド用途
File.AppendAllText(path, text)既存内容を残して追記
File.ReadAllText(path)1 回で 全文読み込み
File.WriteAllBytes(path, bytes)バイナリデータ (画像・暗号化済み) 書込み

まとめ
File.WriteAllText は “ファイルに文字列を丸ごと保存して終わり” を 1 行で済ませる便利メソッド。
Unity でも .NET Standard の実装がそのまま使えるため、
小〜中サイズのテキストデータを素早くセーブしたい場面で最もシンプルな選択肢になります。


保存場所について

Application.persistentDataPath は、以下のような各プラットフォームに応じた安全な書き込み可能ディレクトリです。

プラットフォーム保存パス例
WindowsC:\Users\<ユーザー>\AppData\LocalLow\<Company>\<AppName>\
Android/storage/emulated/0/Android/data/<package>/files/
iOSApplication sandbox/Library 以下の適切なパス

実行手順

  1. Unity プロジェクトを作成
  2. 空の GameObject を作成し、スクリプトをアタッチ
  3. Play モードにすると、スクリプトが実行されファイルが保存される
  4. Console に出力されたファイルパスから確認可能

応用例(必要に応じて)

  • ボタン押下で保存したい → UI Button に SaveTextFile() をバインド
  • ユーザー名やスコアを記録したい → content に動的データを入れるだけ
  • 読み込み機能も追加したい → File.ReadAllText() を使えば実装可能

まとめ

Unityでのファイル保存はとても簡単に始められます。
まずはこのサンプルから始めて、アプリケーションのログやユーザーデータの保存に応用してみましょう。