質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1462閲覧

Unityのビルド済みアプリケーションでオブジェクトの座標をCSVファイルに出力したい

nerrr

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2023/01/04 17:56

編集2023/01/06 12:40

前提

Unityでオブジェクトの座標をCSVファイルに出力するプロジェクトを作成しています。
Unity内で再生ボタンを押して実行すると
path_of_project/Assets/SaveData.csv
にCSVが出力されるのですが、ビルドしてexe化するとCSVファイルがどこにも生成されません。(念のためドライブ全体でSaveData.csvを検索しましたがヒットしませんでした)
原因をご存じの方いらっしゃいますでしょうか。

該当のソースコード

C#

1using System; 2using System.IO; 3using System.Text; 4using System.Collections; 5using System.Collections.Generic; 6using UnityEngine; 7 8public class SaveXY : MonoBehaviour 9{ 10 private StreamWriter sw; 11 private string path; 12 GameObject ball_obj; 13 GameObject player_obj; 14 void Start() 15 { 16 path = Application.dataPath + "/" + "SaveData.csv"; 17 Debug.Log (path); 18 sw = new StreamWriter(path, true, Encoding.GetEncoding("Shift_JIS")); 19 string[] s1 = { "time", "x_b", "y_b", "x_p", "y_p" }; 20 string s2 = string.Join(",", s1); 21 sw.WriteLine(s2); 22 ball_obj = GameObject.Find ("Ball"); 23 player_obj = GameObject.Find ("Player"); 24 } 25 26 void OnApplicationQuit() 27 { 28 sw.Close(); 29 } 30 31 void Update() 32 { 33 string[] s1 = { DateTime.Now.ToString(), ball_obj.transform.position.x.ToString(), ball_obj.transform.position.y.ToString(), player_obj.transform.position.x.ToString(), player_obj.transform.position.y.ToString() }; 34 string s2 = string.Join(",", s1); 35 //Debug.Log (s2); 36 sw.WriteLine(s2); 37 } 38 39 40}

補足情報(FW/ツールのバージョンなど)

Editor Version:2021.3.4f1
OS:Windows 11 Pro

追記①(2023/1/5 20:19)

void Update()の中身を書き換え、Escapeでゲームを終了するようにしましたがcsvファイルが保存されませんでした。(さらに、Application.Quit()が効かずゲームが起動しっぱなしになってしまう症状が出ています。エディタ上では正常に終了しています。)
また、ビルドオプションをWindow表示にして閉じても同じ症状です。

C#

1void Update() 2 { 3 string[] s1 = { DateTime.Now.ToString(), ball_obj.transform.position.x.ToString(), ball_obj.transform.position.y.ToString(), player_obj.transform.position.x.ToString(), player_obj.transform.position.y.ToString() }; 4 string s2 = string.Join(",", s1); 5 //Debug.Log (s2); 6 7 sw.WriteLine(s2); 8 9 if (Input.GetKeyDown(KeyCode.Escape)) 10 { 11 sw.Close(); 12 #if UNITY_EDITOR 13 UnityEditor.EditorApplication.isPlaying = false; 14 #else 15 Application.Quit(); 16 #endif 17 return; 18 } 19 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ganta7188

2023/01/05 03:41

exeの状態だと、もしかしたらOnApplicationQuitが呼ばれていないのかもしれません。 Updateの中にキー入力のif文を作って、例えばAキーが押されたら sw.Close();するなど試してみるといいかもしれません。 あとはウィンドウモードで右上の×を押して閉じる場合にはOnApplicationQuitが呼ばれるらしいので、それも試してみるといいかもです
nerrr

2023/01/05 11:09 編集

コメントありがとうございます。 おっしゃるやり方では解決できませんでした。 また、Application.Quit()が効かないという症状も発生してしまいました。 (以上の内容は、追記①として更新しました。)
ganta7188

2023/01/05 13:09

念のため、Application.Quitをせずに、とりあえずUpdate内でキーを押したらsw.Closeだけ呼ばれるようにして保存されるかどうかを見てもらってもいいでしょうか? もしかしたら保存し終わる前にアプリケーションが終了しているのかもしれないからです。
nerrr

2023/01/05 14:39

仰る解決策で解決できず、ふと思い立ってStreamWriterのEncodingをUTF8にしたらあっさり解決しました。 自己解決という形になり申し訳ありませんが、たくさんアドバイスを頂きありがとうございました。
ganta7188

2023/01/05 15:37

ああ、そこも怪しいポイントでしたよね 解決したようで良かったです!
nerrr

2023/01/06 03:35

katsukoさん、ありがとうございます! 次からその方法でデバッグを進めていこうと思います。
guest

回答1

0

自己解決

解決策

StreamWriterのエンコードをUTF8にしたら解決しました。

C#

1sw = new StreamWriter(path, true, Encoding.UTF8);

追記

ビルド後のアプリケーションで以下のエラーが発生していたようです。

NotSupportedException: Encoding 932 data could not be found. Make sure you have correct international codeset assembly installed and enabled.

自分はUTF8にしても不都合がなかったので試していないですが、どうしてもShift JISを使いたい方は以下の方法でエンコードに関わるdllファイルをビルド時に組み込むことができるようです。

https://baba-s.hatenablog.com/entry/2019/03/18/155000

投稿2023/01/05 14:41

編集2023/01/06 03:40
nerrr

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問