【Unity】テキストデータを保存・取得


この記事の内容は簡単にテキストファイルを書き出したい場合に使用できます。

外部ファイルにデータを保存しているのでメモリ消費があります。
かなり連続して処理するとクラッシュしますので、そのあたりは一定期間ごとやボタンで保存などうまく処理してください。

テキストファイルの操作

テキストファイル管理クラスの作成

TextFileMan.csというテキストファイルを管理するクラスを用意します。
テキストファイルの読み書きを行います。

/*
 * TextFileMan.cs
 * 
 * Copyright (c) 2020 by ConsoleSoup All rights reserved.
 * Created by ConsoleSoup on 2020/02/25.
 * 
 * Blog   :https://consolesoup.com/unity-text-read-write/
 * Twitter:https://twitter.com/consolesoup
 * 
 */

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

/*==============================================================*
 * TextFileMan : Assetsフォルダ以下で文字列データ管理
 *==============================================================*/
public class TextFileMan : MonoBehaviour {

    /*----------------------------------------------------------*
     * saveText : Assetsフォルダ以下のpathのファイルにtextの内容を保存
     *       in : string path
     *          : string text
     *      out : bool
     *----------------------------------------------------------*/
    public bool saveText(string path, string text)
    {
        //ストリームライターwriterに書き込む
        try {
            using (StreamWriter writer = new StreamWriter(Application.dataPath + path,false)){
                writer.Write(text);
                writer.Flush();
                writer.Close();
            }
        } catch (Exception e) {
            Debug.Log(e.Message);
            return false;
        }
        return true;
    }

    /*----------------------------------------------------------*
     * saveText : Assetsフォルダ以下のpathのファイルからtextの内容を取得
     *       in : string path
     *      out : string
     *----------------------------------------------------------*/
    public string readText(string path)
    {
        //ストリームリーダーsrに読み込む
        string strStream = "";
        try {
            //※Application.dataPathはプロジェクトデータのAssetフォルダまでのアクセスパスのこと,
            using (StreamReader sr = new StreamReader(Application.dataPath + path)){
                //ストリームリーダーをstringに変換
                strStream = sr.ReadToEnd();
                sr.Close();
            }
        } catch (Exception e) {
            Debug.Log(e.Message);
        }

        return strStream;
    }
}

TextFileMan.csではApplication.dataPathなのでAssetsのフォルダ以下に保存しています。
スマホアプリなどの時はApplication.temporaryCachePathなどに変更してキャッシュフォルダに変えたりしてください。

パスに関しては以下の記事をどうぞ。

TextFileMan.csの使い方

  1. TextFileMan.csをUnityプロジェクトに追加
    • UnityプロジェクトのHierarchyで新しいC#ファイル「TextFileMan.cs」を作成。
    • 上のScriptをコピー&ペーストして保存。
  2. 保存・取得したいScriptで以下を記入。

利用準備

記入したScriptがComponentとして追加されているGameObjectにTextFileMan.csが追加されていなければ追加。
使用する前に必ず呼ぶ必要がある。

TextFileMan textfileMan = this.gameObject.GetComponent<NKTextMan>();
if (textfileMan == null) {
  textfileMan = this.gameObject.AddComponent<TextFileMan>();
}

テキストファイル出力

上の利用準備で取得したtextfileManを使用します。
saveTextメソッドでパスと文字列を送ってテキストファイルとして保存します。

if(textfileMan.saveText("/○○/△△/save.txt","保存したい文字列")){
  //保存成功
}else{
  //保存失敗
}

テキストファイル入力

上の利用準備で取得したtextfileManを使用します。
readTextメソッドでパスを指定してテキストファイルからテキストを読み込みます。

読み込み後に追記して出力することで上書きができます。

string text = textMan.readText("/○○/△△/save.txt");

One thought on “【Unity】テキストデータを保存・取得

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です