回答編集履歴

3 追伸

shironegi

shironegi score 111

2016/05/30 22:10  投稿

こんにちは.
・問題点
StreamWriterに渡す引数が間違っています.
Resources.LoadはAssets/Resourcesからの「相対パス(拡張子無し)」を受け取る仕様ですが,
StreamWriterに渡すのは「絶対パス」です.
Resources.Loadで一旦読みこんだcsvのcsv.nameで得られるのは「ファイル名(拡張子無し)」なので,StreamWriterが想定している形式になっておらず読み込みに失敗しています.
・プログラムが間違いなのか
書き方,オブジェクトの使用手順等は問題ありませんが,上記のように関数・クラスごとに想定されている引数の形式が異なることを理解して,正しく記述しなければ正常に動作しません.
なお,間違いというわけではありませんが,Resources.Loadで一旦読み込むこと自体が現時点では不要です.
・改善点
まず,StreamReader(Application.dataPath + path)で正しく読み込めるようになったのは,「Application.dataPath + path」で絶対パスが生成されたからでしょう.
なお,これではWebPlayerやAndroidでは上手くいかないとのことですが,
プラットフォームが異なると,書き込める場所に制限があります.
Application.dataPathで得られるのはゲームデータを格納するフォルダのパスなので,プラットフォームによっては読み取り専用になっています.
Application.persistentDataPathを使用すると,実行中にファイル保存可能なパスが得られるので,このパス以下の場所ならば保存可能だと思われます.
このように関数・クラスの特性などを(今回の場合はUnityが生成するパスの特性も含めて),リファレンスマニュアルや書籍・Web等で調べることが第一歩です.
 
その上で,ログ出力やデバッガでブレーク等して,パスが想定通りの形式で渡されているかを調べながらコーディングを進めるようにすると良いでしょう.
全てが想定通りで正しい形式で動作している事が確認できているのに,なお思ったように動作しない場合は,ここのようなフォーラムに頼ると良いと思います.
▼追伸  
今回の場合は,大前提としてResources.LoadはUnityのもの(つまりUnityに特化したもの),StreamWriterはC#に元々あるもの,という成り立ちの違いがあることに気付くと,仕様に違いがあることも納得できるかと思います.こういった点にも意識を向けて取り組んでみて下さい.  
 
参考になれば幸いです.
2 補足

shironegi

shironegi score 111

2016/05/30 21:58  投稿

こんにちは.
・問題点
StreamWriterに渡す引数が間違っています.
Resources.LoadはAssets/Resourcesからの「相対パス(拡張子無し)」を受け取る仕様ですが,
StreamWriterに渡すのは「絶対パス」です.
Resources.Loadで一旦読みこんだcsvのcsv.nameで得られるのは「ファイル名(拡張子無し)」なので,StreamWriterが想定している形式になっておらず読み込みに失敗しています.
・プログラムが間違いなのか
書き方,オブジェクトの使用手順等は問題ありませんが,上記のように関数・クラスごとに想定されている引数の形式が異なることを理解して,正しく記述しなければ正常に動作しません.
なお,間違いというわけではありませんが,Resources.Loadで一旦読み込むこと自体が現時点では不要です.
・改善点
まず,StreamReader(Application.dataPath + path)で正しく読み込めるようになったのは,「Application.dataPath + path」で絶対パスが生成されたからでしょう.
なお,これではWebPlayerやAndroidでは上手くいかないとのことですが,
プラットフォームが異なると,書き込める場所に制限があります.
Application.dataPathで得られるのはゲームデータを格納するフォルダのパスなので,プラットフォームによっては読み取り専用になっています.
Application.persistentDataPathを使用すると,実行中にファイル保存可能なパスが得られるので,このパス以下の場所ならば保存可能だと思われます.
このように関数・クラスの特性などを(今回の場合はUnityが生成するパスの特性も含めて),リファレンスマニュアルや書籍・Web等で調べることが第一歩です.
その上で,ログを出力してパスが想定通りの形式で渡されているかを調べながらコーディングを進めるようにすると良いでしょう.
その上で,ログ出力やデバッガでブレーク等して,パスが想定通りの形式で渡されているかを調べながらコーディングを進めるようにすると良いでしょう.
全てが想定通りで正しい形式で動作している事が確認できているのに,なお思ったように動作しない場合は,ここのようなフォーラムに頼ると良いと思います.
参考になれば幸いです.
1 補足など

shironegi

shironegi score 111

2016/05/30 21:48  投稿

こんにちは.
・問題点
StreamWriterに渡す引数が間違っています.
Resources.LoadはAssets/Resourcesからの「相対パス(拡張子無し)」を受け取る仕様ですが,
StreamWriterに渡すのは「絶対パス」です.
Resources.Loadで一旦読みこんだcsvのcsv.nameで得られるのは「ファイル名(拡張子無し)」なので,StreamWriterが想定している形式になっておらず読み込みに失敗しています.
・プログラムが間違いなのか
書き方,オブジェクトの仕様手順はあっていますが,上記のように関数・クラスごとに想定されている引数の形式が異なることを理解して記述しなければ正常に動作しません.
書き方,オブジェクトの使用手順等は問題ありませんが,上記のように関数・クラスごとに想定されている引数の形式が異なることを理解して,正しく記述しなければ正常に動作しません.
なお,間違いというわけではありませんが,Resources.Loadで一旦読み込むこと自体が現時点では不要です.
・改善点
上記のように関数・クラスによって想定する引数の形式が違う事を知り,リファレンスマニュアル等で引数の形式を調べて,正しくコードを記述する事が求められます.
StreamReader(Application.dataPath + path)で正しく読み込めるようになったのは,「Application.dataPath + path」で絶対パスが生成されたからでしょう.
まず,StreamReader(Application.dataPath + path)で正しく読み込めるようになったのは,「Application.dataPath + path」で絶対パスが生成されたからでしょう.
なお,これではWebPlayerやAndroidでは上手くいかないとのことですが,
プラットフォームが異なると,書き込める場所に制限があったりします.
プラットフォームが異なると,書き込める場所に制限があります.
Application.dataPathで得られるのはゲームデータを格納するフォルダのパスなので,プラットフォームによっては読み取り専用になっています.
Application.persistentDataPathを使用すると,実行中にファイル保存可能なパスが得られるので,このパス以下の場所ならば保存可能だと思われます.
このように関数・クラスの特性などを(今回の場合はUnityが生成するパスの特性も含めて),リファレンスマニュアルや書籍・Web等で調べることが第一歩です.  
その上で,ログを出力してパスが想定通りの形式で渡されているかを調べながらコーディングを進めるようにすると良いでしょう.  
全てが想定通りで正しい形式で動作している事が確認できているのに,なお思ったように動作しない場合は,ここのようなフォーラムに頼ると良いと思います.  
 
参考になれば幸いです.

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る