回答編集履歴

7

代替案の追加

2016/06/01 11:32

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -111,3 +111,15 @@
111
111
  具体的な方法やコード等が分からなければ聞いてもらえれば後ほど追加でお答えするとして,
112
112
 
113
113
  その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?
114
+
115
+
116
+
117
+
118
+
119
+ ※ 質問内容から少しそれますが,
120
+
121
+ StreamReaderの代わりにFile.ReadAllText,StreamWriterの代わりにFile.WriteAllTextというものもあります.これらはファイルをCloseする必要がありませんし(ストリーミングしないため),使用方法もより単純です.
122
+
123
+ CSVファイルにこだわる理由は分かりませんが,セーブが目的なのであれば,UnityにはPlayerPrefsという仕組みが用意されており,これを使用すればファイル読み書きを気にすることなくセーブが実装出来ます.
124
+
125
+

6

誤りの修正

2016/06/01 11:32

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -48,11 +48,17 @@
48
48
 
49
49
  Resources.Loadはファイルの読み込みは出来ますが,保存はできません.
50
50
 
51
+ さらにマニュアルによるとResourcesフォルダ内のアセットしか読み込めないようです.
52
+
53
+ (http://docs.unity3d.com/ja/current/Manual/LoadingResourcesatRuntime.html)
54
+
55
+ したがってResourcesフォルダ外のセーブデータフォルダのファイルを読み込むにはStreamReaderを使用する必要があると思います.
56
+
51
57
  保存にはStreamWriterを使用しなければなりません.
52
58
 
53
59
  流れとしては,
54
60
 
55
- Resources.LoadもしくはStreamReaderで既存のセーブデータファイル開く
61
+ ・StreamReaderで既存のセーブデータファイルがあれば開く
56
62
 
57
63
  ・内容を読み込み内容を一旦変数に書きうつして閉じる
58
64
 
@@ -86,7 +92,7 @@
86
92
 
87
93
  読み込むことだけを考えれば,StreamReaderとResource.Loadは,どちらも読み込み機能しかありませんので,どちらでも構いません.
88
94
 
89
- ただし書き込みにはStreamWriterを使わなければなりませんのでパス形式を合わせるのであればStreamReaderを使用する方が一致して良いと思い
95
+ ただし書き込みにはStreamWriterを使わなければなりません前述ようにResourcesフォルダ外であればStreamReaderでなければなりせん
90
96
 
91
97
 
92
98
 
@@ -98,9 +104,7 @@
98
104
 
99
105
  その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
100
106
 
101
- Resources.LoadはUnity管理アセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事にるのではなと思います.(後ほど確認してみようと思います)
107
+ プラットフォームが変わればApplication.persistentDataPathが変わるので,StreamReaderを使うしかないと思います.
102
-
103
-
104
108
 
105
109
 
106
110
 

5

補足

2016/06/01 11:08

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -72,7 +72,11 @@
72
72
 
73
73
 
74
74
 
75
- どのプラットォームでも書き換え可能な場所にセーブデータダを作って,そこの中れば場所を変えずに更新する方法はあります.
75
+ 読み込んだァイルと同じァイパス保存すれば場所を変えずに保存できます.
76
+
77
+ (読み込み時にファイルを開いたままCloseしない状態だと書き込めないという実装上の注意点はありますが.)
78
+
79
+ 今回の肝は3つ目だと思うので,そちらの回答を見て下さい.
76
80
 
77
81
 
78
82
 

4

見やすさの向上

2016/06/01 10:54

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  上記を踏まえて質問の回答ですが,
70
70
 
71
- >・ファイル場所を変えずにCSVを更新する方法はあるのか?
71
+ > ・ファイル場所を変えずにCSVを更新する方法はあるのか?
72
72
 
73
73
 
74
74
 
@@ -76,7 +76,7 @@
76
76
 
77
77
 
78
78
 
79
- >・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
79
+ > ・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
80
80
 
81
81
 
82
82
 
@@ -86,7 +86,7 @@
86
86
 
87
87
 
88
88
 
89
- >・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
89
+ > ・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
90
90
 
91
91
 
92
92
 

3

オブジェクト名修正

2016/06/01 10:48

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
94
94
 
95
- その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentPathが用意されているので,それを使用する他ありません.
95
+ その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
96
96
 
97
97
  Resources.LoadはUnity管理のアセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事になるのではないかと思います.(後ほど確認してみようと思います)
98
98
 

2

追記

2016/06/01 10:47

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -42,23 +42,61 @@
42
42
 
43
43
 
44
44
 
45
+
46
+
45
- 質問上がっている内容について少し触れると
47
+ 実装について少し触れますが
46
48
 
47
49
  Resources.Loadはファイルの読み込みは出来ますが,保存はできません.
48
50
 
49
- 保存にはStreamableWriterを使用しなければなりません.
51
+ 保存にはStreamWriterを使用しなければなりません.
50
52
 
51
53
  流れとしては,
52
54
 
53
- ・Resources.LoadもしくはStreamableReaderで既存のセーブデータファイルを開く
55
+ ・Resources.LoadもしくはStreamReaderで既存のセーブデータファイルを開く
54
56
 
55
57
  ・内容を読み込み内容を一旦変数に書きうつして閉じる
56
58
 
57
59
  ・(書き写した変数の中身を編集する)
58
60
 
59
- ・StreamableWriterでセーブデータファイルを開いて内容を書き込んで閉じる.
61
+ ・StreamWriterでセーブデータファイルを開いて内容を書き込んで閉じる.
60
62
 
61
63
  となります.
64
+
65
+
66
+
67
+
68
+
69
+ 上記を踏まえて質問の回答ですが,
70
+
71
+ >・ファイル場所を変えずにCSVを更新する方法はあるのか?
72
+
73
+
74
+
75
+ どのプラットフォームでも書き換え可能な場所にセーブデータフォルダを作って,そこの中であれば場所を変えずに更新する方法はあります.
76
+
77
+
78
+
79
+ >・Resource.Loadのパスは相対パスで、StreamRenderは絶対パスで指定しなければならないが、どちらにあわせれば良いのか?(私的にはResources.Loadを使いたい)
80
+
81
+
82
+
83
+ 読み込むことだけを考えれば,StreamReaderとResource.Loadは,どちらも読み込み機能しかありませんので,どちらでも構いません.
84
+
85
+ ただし書き込みにはStreamWriterを使わなければなりませんので,パスの形式を合わせるのであればStreamReaderを使用する方が一致して良いと思います.
86
+
87
+
88
+
89
+ >・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
90
+
91
+
92
+
93
+ これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
94
+
95
+ その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentPathが用意されているので,それを使用する他ありません.
96
+
97
+ Resources.LoadはUnity管理のアセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事になるのではないかと思います.(後ほど確認してみようと思います)
98
+
99
+
62
100
 
63
101
 
64
102
 

1

タグ修正

2016/06/01 10:44

投稿

shironegi
shironegi

スコア119

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  > 解禁情報や成長過程などのデータを管理したいと思ったからです。
6
+
7
+
6
8
 
7
9
  つまりセーブデータということですね?
8
10