Windowsでしか動かす予定がないならなんでもOKなんですけど、
AndroidやiOSなども将来的に考えているならば、きちんとパスの確認をしたほうが良いです。
まず環境ごとにDebug.Logでそれぞれのパスを確認する事をおすすめします。
結論から言うと、"アプリの書き込み可能なパス+/Data/saveData.csv"に保存すれば良いと思います。
プラットフォームによっては少し工夫が必要です(後述)。
セーブデータなど動的に保存したい場合はStreamingAssetsは用途として正しくないと思います。
StreamingAssetsについて
https://docs.unity3d.com/ja/2019.4/Manual/StreamingAssets.html
多くのプラットフォームでは、ストリーミングアセットフォルダーの場所は読み取り専用です。ランタイムに新しいファイルに変更を加えたり書き込むことはできません。書き込み可能なフォルダーの場所には Application.persistentDataPath を使用します。
上記の公式ドキュメントにもあるように
基本的には、セーブデータなどの保存場所はApplication.persistentDataPathで良いと思いますが、
Androidの場合は特殊で、アプリ専用領域である「/data/data/パッケージ/files/」以下にファイルを保存するほうが望ましいと考えます。
アプリ以外からは参照できないパスのため。
これはUnityから直接参照できるメソッドがないので、AndroidのAPIを呼び出す必要があります。
このような状況を踏まえて自分は書き込み可能なパスを取得するためのメソッドを作って使っています。
今回はWindows限定との事なので、関係ないですが。
でもせっかくゲームを作るならWindows,Android,iOSでの展開も考えたいところなので
保存先のパスを抽象化しておくのはありかなと思います。
参考までにこんな感じのソースを実際に使っています。
C#
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4using System;
5using System.IO;
6
7public class FileUtils
8{
9
10 /// <summary>
11 /// 書き込み可能なディレクトリのパスを返す
12 /// ファイルの保存はこのディレクトリの直下ではなく、サブディレクトリを作成して保存する事を推奨します
13 /// </summary>
14 /// <returns>プラットフォームごとの書き込み可能なディレクトリのパス</returns>
15 public static string GetWritableDirectoryPath()
16 {
17 // Androidの場合、Application.persistentDataPathでは外部から読み出せる場所に保存されてしまうため
18 // アプリをアンインストールしてもファイルが残ってしまう
19 // ここではアプリ専用領域に保存するようにする
20#if !UNITY_EDITOR && UNITY_ANDROID
21 using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
22 using (var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
23 using (var getFilesDir = currentActivity.Call<AndroidJavaObject>("getFilesDir"))
24 {
25 return getFilesDir.Call<string>("getCanonicalPath");
26 }
27#else
28 return Application.persistentDataPath;
29#endif
30 }
31
32}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 15:02
2021/08/05 15:58
2021/08/05 23:16