teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

代替案の追加

2016/06/01 11:32

投稿

shironegi
shironegi

スコア119

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

誤りの修正

2016/06/01 11:32

投稿

shironegi
shironegi

スコア119

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
- Resources.LoadもしくはStreamReaderで既存のセーブデータファイル開く
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を使わなければなりませんのでパス形式を合わせるのであればStreamReaderを使用する方が一致して良いと思い
48
+ ただし書き込みにはStreamWriterを使わなければなりません前述ようにResourcesフォルダ外であればStreamReaderでなければなりせん
46
49
 
47
50
  > ・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
48
51
 
49
52
  これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
50
53
  その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
51
- Resources.LoadはUnity管理のアセットを読み込むも(のはず)なので,この場合StreamReaderを使用する事にるのではなと思います.(後ほど確認してみようと思います)
54
+ プラットフォームが変わればApplication.persistentDataPathが変わるので,StreamReaderを使うしかないと思います.
52
55
 
53
-
54
56
  具体的な方法やコード等が分からなければ聞いてもらえれば後ほど追加でお答えするとして,
55
57
  その前にまずはセーブデータの扱い方について,ゲームデータと切り分けて考えてみてもらうことは可能でしょうか?

5

補足

2016/06/01 11:08

投稿

shironegi
shironegi

スコア119

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

見やすさの向上

2016/06/01 10:54

投稿

shironegi
shironegi

スコア119

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

オブジェクト名修正

2016/06/01 10:48

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -45,7 +45,7 @@
45
45
  >・プラットフォーム関係なくCSVを更新するには?(できればResources.Loadに沿ってやりたい)
46
46
 
47
47
  これを考えるならば,前提としてファイルの場所が「どのプラットフォームでも書き換え可能な場所」でなければなりません.
48
- その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentPathが用意されているので,それを使用する他ありません.
48
+ その為に,プラットフォームにあわせてパスが勝手に変わってくれるApplication.persistentDataPathが用意されているので,それを使用する他ありません.
49
49
  Resources.LoadはUnity管理のアセットを読み込むもの(のはず)なので,この場合StreamReaderを使用する事になるのではないかと思います.(後ほど確認してみようと思います)
50
50
 
51
51
 

2

追記

2016/06/01 10:47

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -20,15 +20,34 @@
20
20
 
21
21
  前回の質問で,Application.dataPathで取得出来るパスは,プラットフォームによって書き込み出来ない場合があると書きましたが,書き込みが制限されている理由のひとつとして,ゲーム起動中にゲームデータが上書きされて,ゲームの動作がプレイ中に書き変わってしまわないように制限する目的があるのです.
22
22
 
23
+
23
- 質問上がっている内容について少し触れると
24
+ 実装について少し触れますが
24
25
  Resources.Loadはファイルの読み込みは出来ますが,保存はできません.
25
- 保存にはStreamableWriterを使用しなければなりません.
26
+ 保存にはStreamWriterを使用しなければなりません.
26
27
  流れとしては,
27
- ・Resources.LoadもしくはStreamableReaderで既存のセーブデータファイルを開く
28
+ ・Resources.LoadもしくはStreamReaderで既存のセーブデータファイルを開く
28
29
  ・内容を読み込み内容を一旦変数に書きうつして閉じる
29
30
  ・(書き写した変数の中身を編集する)
30
- StreamableWriterでセーブデータファイルを開いて内容を書き込んで閉じる.
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

タグ修正

2016/06/01 10:44

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  追加情報ありがとうございます.
2
2
 
3
3
  > 解禁情報や成長過程などのデータを管理したいと思ったからです。
4
+
4
5
  つまりセーブデータということですね?
5
6
 
6
7
  であれば,まずはゲームデータ(リソース)とセーブデータを切り分けて考えなければなりません.