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 | 保存する文字列データ | 例:スコア、設定、ログなど |
動作フロー
- 存在確認
内部でFileStream
を開く際に、対象ファイルの有無をチェック。 - ストリーム取得
無ければ空ファイルを作成して書込みモードでオープン。 - エンコード & 書込
文字列 → UTF‑8 バイト配列に変換 → 全バイトをストリームへ出力。 - 自動クローズ
内部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
は、以下のような各プラットフォームに応じた安全な書き込み可能ディレクトリです。
プラットフォーム | 保存パス例 |
---|---|
Windows | C:\Users\<ユーザー>\AppData\LocalLow\<Company>\<AppName>\ |
Android | /storage/emulated/0/Android/data/<package>/files/ |
iOS | Application sandbox/Library 以下の適切なパス |
実行手順
- Unity プロジェクトを作成
- 空の GameObject を作成し、スクリプトをアタッチ
- Play モードにすると、スクリプトが実行されファイルが保存される
- Console に出力されたファイルパスから確認可能
応用例(必要に応じて)
- ボタン押下で保存したい →
UI Button
にSaveTextFile()
をバインド - ユーザー名やスコアを記録したい →
content
に動的データを入れるだけ - 読み込み機能も追加したい →
File.ReadAllText()
を使えば実装可能
まとめ
Unityでのファイル保存はとても簡単に始められます。
まずはこのサンプルから始めて、アプリケーションのログやユーザーデータの保存に応用してみましょう。
ディスカッション
コメント一覧
まだ、コメントがありません