回答編集履歴
7
代替案の追加
answer
CHANGED
@@ -54,4 +54,9 @@
|
|
54
54
|
プラットフォームが変わればApplication.persistentDataPathが変わるので,StreamReaderを使うしかないと思います.
|
55
55
|
|
56
56
|
具体的な方法やコード等が分からなければ聞いてもらえれば後ほど追加でお答えするとして,
|
57
|
-
その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?
|
57
|
+
その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?
|
58
|
+
|
59
|
+
|
60
|
+
※ 質問内容から少しそれますが,
|
61
|
+
StreamReaderの代わりにFile.ReadAllText,StreamWriterの代わりにFile.WriteAllTextというものもあります.これらはファイルをCloseする必要がありませんし(ストリーミングしないため),使用方法もより単純です.
|
62
|
+
CSVファイルにこだわる理由は分かりませんが,セーブが目的なのであれば,UnityにはPlayerPrefsという仕組みが用意されており,これを使用すればファイル読み書きを気にすることなくセーブが実装出来ます.
|
6
誤りの修正
answer
CHANGED
@@ -23,9 +23,12 @@
|
|
23
23
|
|
24
24
|
実装について少し触れますが,
|
25
25
|
Resources.Loadはファイルの読み込みは出来ますが,保存はできません.
|
26
|
+
さらにマニュアルによるとResourcesフォルダ内のアセットしか読み込めないようです.
|
27
|
+
(http://docs.unity3d.com/ja/current/Manual/LoadingResourcesatRuntime.html)
|
28
|
+
したがってResourcesフォルダ外のセーブデータフォルダのファイルを読み込むにはStreamReaderを使用する必要があると思います.
|
26
29
|
保存にはStreamWriterを使用しなければなりません.
|
27
30
|
流れとしては,
|
28
|
-
・
|
31
|
+
・StreamReaderで既存のセーブデータファイルがあれば開く
|
29
32
|
・内容を読み込み内容を一旦変数に書きうつして閉じる
|
30
33
|
・(書き写した変数の中身を編集する)
|
31
34
|
・StreamWriterでセーブデータファイルを開いて内容を書き込んで閉じる.
|
@@ -42,14 +45,13 @@
|
|
42
45
|
> ・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
|
43
46
|
|
44
47
|
読み込むことだけを考えれば,StreamReaderとResource.Loadは,どちらも読み込み機能しかありませんので,どちらでも構いません.
|
45
|
-
ただし書き込みにはStreamWriterを使わなければなりません
|
48
|
+
ただし書き込みにはStreamWriterを使わなければなりませんし,前述のようにResourcesフォルダ外であればStreamReaderでなければなりません.
|
46
49
|
|
47
50
|
> ・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
|
48
51
|
|
49
52
|
これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
|
50
53
|
その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
|
51
|
-
|
54
|
+
プラットフォームが変わればApplication.persistentDataPathが変わるので,StreamReaderを使うしかないと思います.
|
52
55
|
|
53
|
-
|
54
56
|
具体的な方法やコード等が分からなければ聞いてもらえれば後ほど追加でお答えするとして,
|
55
57
|
その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?
|
5
補足
answer
CHANGED
@@ -35,7 +35,9 @@
|
|
35
35
|
上記を踏まえて質問の回答ですが,
|
36
36
|
> ・ファイル場所を変えずにCSVを更新する方法はあるのか?
|
37
37
|
|
38
|
-
|
38
|
+
読み込んだファイルと同じファイルパスで保存すれば,場所を変えずに保存できます.
|
39
|
+
(読み込み時にファイルを開いたままCloseしない状態だと書き込めないという実装上の注意点はありますが.)
|
40
|
+
今回の肝は3つ目だと思うので,そちらの回答を見て下さい.
|
39
41
|
|
40
42
|
> ・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
|
41
43
|
|
4
見やすさの向上
answer
CHANGED
@@ -33,16 +33,16 @@
|
|
33
33
|
|
34
34
|
|
35
35
|
上記を踏まえて質問の回答ですが,
|
36
|
-
>・ファイル場所を変えずにCSVを更新する方法はあるのか?
|
36
|
+
> ・ファイル場所を変えずにCSVを更新する方法はあるのか?
|
37
37
|
|
38
38
|
どのプラットフォームでも書き換え可能な場所にセーブデータフォルダを作って,そこの中であれば場所を変えずに更新する方法はあります.
|
39
39
|
|
40
|
-
>・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
|
40
|
+
> ・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
|
41
41
|
|
42
42
|
読み込むことだけを考えれば,StreamReaderとResource.Loadは,どちらも読み込み機能しかありませんので,どちらでも構いません.
|
43
43
|
ただし書き込みにはStreamWriterを使わなければなりませんので,パスの形式を合わせるのであればStreamReaderを使用する方が一致して良いと思います.
|
44
44
|
|
45
|
-
>・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
|
45
|
+
> ・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
|
46
46
|
|
47
47
|
これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
|
48
48
|
その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
|
3
オブジェクト名修正
answer
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
>・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
|
46
46
|
|
47
47
|
これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
|
48
|
-
その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.
|
48
|
+
その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
|
49
49
|
Resources.LoadはUnity管理のアセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事になるのではないかと思います.(後ほど確認してみようと思います)
|
50
50
|
|
51
51
|
|
2
追記
answer
CHANGED
@@ -20,15 +20,34 @@
|
|
20
20
|
|
21
21
|
前回の質問で,Application.dataPathで取得出来るパスは,プラットフォームによって書き込み出来ない場合があると書きましたが,書き込みが制限されている理由のひとつとして,ゲーム起動中にゲームデータが上書きされて,ゲームの動作がプレイ中に書き変わってしまわないように制限する目的があるのです.
|
22
22
|
|
23
|
+
|
23
|
-
|
24
|
+
実装について少し触れますが,
|
24
25
|
Resources.Loadはファイルの読み込みは出来ますが,保存はできません.
|
25
|
-
保存には
|
26
|
+
保存にはStreamWriterを使用しなければなりません.
|
26
27
|
流れとしては,
|
27
|
-
・Resources.Loadもしくは
|
28
|
+
・Resources.LoadもしくはStreamReaderで既存のセーブデータファイルを開く
|
28
29
|
・内容を読み込み内容を一旦変数に書きうつして閉じる
|
29
30
|
・(書き写した変数の中身を編集する)
|
30
|
-
・
|
31
|
+
・StreamWriterでセーブデータファイルを開いて内容を書き込んで閉じる.
|
31
32
|
となります.
|
32
33
|
|
34
|
+
|
35
|
+
上記を踏まえて質問の回答ですが,
|
36
|
+
>・ファイル場所を変えずにCSVを更新する方法はあるのか?
|
37
|
+
|
38
|
+
どのプラットフォームでも書き換え可能な場所にセーブデータフォルダを作って,そこの中であれば場所を変えずに更新する方法はあります.
|
39
|
+
|
40
|
+
>・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
|
41
|
+
|
42
|
+
読み込むことだけを考えれば,StreamReaderとResource.Loadは,どちらも読み込み機能しかありませんので,どちらでも構いません.
|
43
|
+
ただし書き込みにはStreamWriterを使わなければなりませんので,パスの形式を合わせるのであればStreamReaderを使用する方が一致して良いと思います.
|
44
|
+
|
45
|
+
>・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
|
46
|
+
|
47
|
+
これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
|
48
|
+
その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentPathが用意されているので,それを使用する他ありません.
|
49
|
+
Resources.LoadはUnity管理のアセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事になるのではないかと思います.(後ほど確認してみようと思います)
|
50
|
+
|
51
|
+
|
33
52
|
具体的な方法やコード等が分からなければ聞いてもらえれば後ほど追加でお答えするとして,
|
34
53
|
その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?
|
1
タグ修正
answer
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
追加情報ありがとうございます.
|
2
2
|
|
3
3
|
> 解禁情報や成長過程などのデータを管理したいと思ったからです。
|
4
|
+
|
4
5
|
つまりセーブデータということですね?
|
5
6
|
|
6
7
|
であれば,まずはゲームデータ(リソース)とセーブデータを切り分けて考えなければなりません.
|