質問: ### 前提・実現したいこと unityで自分で譜面を作成、およびプレイができる音ゲーを作ろうとしています。 構成としては、まず音楽に合わせてノーツを落としたいタイミング、位置でシーン上のパネルをタップ。それらの情報をResourcesファイルのなかにcsvファイルとして作成。譜面の作成が終わったらゲームシーンへと移り、先ほどのcsvファイルを読み込み譜面をプレイ、という流れになっています。 しかし、ゲームシーンに移った際にcsvファイルが存在しないということでエラーが出てしまいます。 そこで、実行中にcsvファイルのリアルタイムでの作成や更新はできるのでしょうか? また、できるとしたらその方法などを教えていただけると幸いです。 初質問で至らない点もあると思いますが、ご教授お願いします。 補足) ・csvファイルは新規作成する形を取っています。 ・ゲームシーンでのファイルの読み込みはStartのなかで行っています。 ・テキストエディタを更新するとcsvファイルの作成、更新がされエラーは出なくなります。しかし、反対にそれをしないといくら待っても作成、更新がされません。これで困っています。 ・実行終了後に確認すると、csvへの書き込み自体は問題なくできています。 ### 発生している問題・エラーメッセージ ``` NullReferenceException: Object reference not set to an instance of an object ``` ### 該当のソースコード ### 試したこと 最初に空のcsvファイルを作成しておき、そこに書き込んでいくというのも試しました。エラーは出なくなりましたが、書き込みの更新ができていないのでゲームシーンでは何も起こらず、根本の解決ができていないという結果でした。 「unity csv」 に続けて"出力"や"更新"、"読み込み"などのワードを合わせて検索して見ましたが、うまく望んだ結果が見つかりませんでした。詳しく乗っているサイトなど教えていただけると幸いです。 ### 補足情報(FW/ツールのバージョンなど) C#、unity2018、Mac、visual studio code
回答: そもそも**Resourcesフォルダの中身の更新はエディタ上でしか行えません。** もし`Resources.Load`を使っているなら、実機ビルド上では動作しません(ビルド時点でResourcesフォルダ内にあるファイルしか読み込めません)。 実機上でも使用したいなら`File.IO`等による読み書きが必要です。 ■補足情報 エディタ上でも何故正常に動作しないかというと、これがUnityの仕様だからです。 `Resources.Load`で読み取られるのは「Unityプロジェクト内にあるファイル」の中身です。(プロジェクトファイルがあるフォルダの中のファイルの中身ではない) では、プロジェクト内にあるファイルがいつ更新されるかというと、「ゲームプレイが開始・終了する」「Unity(エディタ)から別のソフトにアクティブが移り、その後またUnityにアクティブが戻って来たタイミング」などです。(補足の3番目の挙動の理由がこれ) エディタスクリプトなどを利用すれば任意のタイミングでファイル更新が出来るかもしれませんが詳しく調べていないので必要なら探してみてください。 (なお、エディタスクリプトは実機上では動作しません。「Resourcesフォルダの中身の更新はエディタ上でしか行えない」の原則は変わらないので、あくまで「違う要件なら使えるかもね」という補足情報になります)