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

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

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

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

Unity

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

Q&A

解決済

2回答

462閲覧

Unity voidが呼び出されない件

nagais

総合スコア18

C#

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

Unity

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

0グッド

1クリップ

投稿2018/01/17 10:16

編集2018/01/17 12:12

##実現したいこと
記録したデータをcsvファイルにて、出力しようとプログラムを作成しました。

###発生している問題・エラーメッセージ
voidでcsvファイルを作成するように呼び出そうと書いてみたのですが、呼び出すことが出来ません。
![イメージ説明]

###該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System; using System.Text; public class Manager : MonoBehaviour { public GameObject Text; public GameObject Answer_Text; public GameObject Cover; private Text input_text; private Text answer_text; public static List<string> Input_list; private int count_list; private int old_count_list; public static bool Input_word; private string[] words = {"あ","い","う","え","お", "か","き","く","け","こ", "さ","し","す","せ","そ", "た","ち","つ","て","と", "な","に","ぬ","ね","の", "は","ひ","ふ","へ","ほ", "ま","み","む","め","も", "や","ゆ","よ", "ら","り","る","れ","ろ", "わ","を","ん",}; private List<string> answer; private List<float> answer_time; private int correct_num; private float time; private bool time_Flag; private bool log_Flag; private string start_Up_Time; // Use this for initialization private void Awake() { } void Start () { Input_list = new List<string>(); answer = new List<string>(); answer_time = new List<float>(); count_list = 0; old_count_list = 0; Input_word = false; input_text = Text.GetComponent<Text>(); answer_text = Answer_Text.GetComponent<Text>(); for (int i = 0; i < 20; i++) { int rand = UnityEngine.Random.Range(0, 46); answer.Add(words[rand]); answer_text.text += answer[i]; } Answer_Text.SetActive(false); correct_num = 0; time = 0; time_Flag = false; log_Flag = false; start_Up_Time = DateTime.Now.ToString("MMdd_hhmmss"); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { Answer_Text.SetActive(true); time_Flag = true; Cover.SetActive(false); } if(Input.GetKeyDown(KeyCode.A)) { Write_Log(); } if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } if (time_Flag == true) { time += Time.deltaTime; } count_list = Input_list.Count; if (count_list != old_count_list) { input_text.text += Input_list[count_list - 1]; if (count_list == 20) { input_text.text += "\n"; } old_count_list = count_list; } if (count_list != 0) { if (answer[correct_num] == Input_list[count_list - 1]) { if (correct_num < 19) { correct_num++; answer_time.Add(time); } else if (correct_num == 19 && log_Flag == false) { time_Flag = false; answer_text.text = time.ToString("N3"); Write_Log(); answer_text.text = "logを吐き出した。"; log_Flag = true; Debug.Log("answer_time_num: " + answer_time.Count.ToString()); Debug.Log("answer_num: " + answer.Count.ToString()); } } } } public void Write_Log() { answer_time.Add(time); string filename = "Play_" + start_Up_Time + ".csv"; StreamWriter sw = new StreamWriter(filename, false, Encoding.GetEncoding(932)); /*FileInfo fi; fi = new FileInfo( "Play_" + start_Up_Time + ".csv"); */ //sw = fi.AppendText(); sw.Write("Correct" + "," + "Answer" + "," + "Time[s]"); sw.WriteLine(); for (int i = 0; i < count_list; i++) { if (i < 20) { sw.Write(answer[i]); } else if (i >= 20) { sw.Write(""); } sw.Write(","); sw.Write(Input_list[i]); sw.Write(","); if (i < 20) { sw.Write(answer_time[i]); } else if (i >= 20) { sw.Write(""); } sw.WriteLine(); } sw.Flush(); sw.Close(); } }

###試したこと
awakeを使うと呼び出しが出来ない、という情報をチラッと見たのでawakeを使わないようにしてみたのですが、うまくできませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Unity 2017.1.1f1, Visual Studio 2017

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

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

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

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

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

nagais

2018/01/17 11:26 編集

public void Write_Log() で宣言したvoidを、条件が満たされたときに「Write_Log()」で呼び出して処理をするといった意味合いで書きました。 半端な理解での質問で申し訳ありません。
himakuma

2018/01/17 11:29

voidは引数の宣言という認識はありますか?「Debug.Log("answer_time_num: "...」の部分は実行されていることは確認できるでしょうか?
himakuma

2018/01/17 11:30

すいません、「うまく出力できていません」というのはエラー終了、ファイルが見つからない、ファイルの内容がおかしいなどありますが、どういう状態でしょうか?
nagais

2018/01/17 11:35

はい、認識はありますが勉強不足のようです、勉強し直します。Unityで作業中は確認できますが、ビルドしたもので動かすとWrite_Log()の部分から下は実行されなくなる といった状況です。
nagais

2018/01/17 11:35

うまく出力できていないというのは、ファイルが作成されていない といった意味で使用しました。
himakuma

2018/01/17 11:37

試しに、Write_Log()内で、 Debug.Logをして、Write_Log()内の現在の処理をすべてコメントアウトして実行すると実行できますか?
nagais

2018/01/17 11:43

はい、Unity上では実行できています。ファイルも作成されています。
himakuma

2018/01/17 11:50

ビルドで実行してみてください
nagais

2018/01/17 11:56

実行してみましたが、ファイルは生成されていませんでした。
himakuma

2018/01/17 11:59

Windowsですか?
himakuma

2018/01/17 12:00

最初のコードでビルドして、実行した場合、エラーが発生して動かないことはないですか?
himakuma

2018/01/17 12:00

※起動して即終了
nagais

2018/01/17 12:04

Windowsです。Development Build でビルドする とエラーを見れるという情報を見つけましたので実行してみたところ"NotSupportedException:CodePage 932 not supported"というエラーが発生していました。
nagais

2018/01/17 12:04

どうやらEncoding.GetEncoding(932) という処理がまずかったようです。
guest

回答2

0

自己解決

無事、解決できたので、自己解決の方に書かさせていただきます。
932 という番号はUnityではサポートされていない番号でした。
そこで、他に有名な文字コードの番号ではできないものかと試してみたところ、
65001 というutf-8を意味するコードページIDを使用することで、問題なくcsvファイルが出力されました。
回答してくださったhimakuma様、ありがとうございました。

投稿2018/01/18 00:58

nagais

総合スコア18

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

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

himakuma

2018/01/18 01:00

良かったです。あまり力になれずすいません(>w<)
nagais

2018/01/18 01:06

いえ、himakuma様がdebug関連のことを指摘してくださったため、解決にまで至りました。 ありがとうございました。
guest

0

932を”shift_jis”にしてみてください

投稿2018/01/17 12:02

編集2018/01/18 00:32
himakuma

総合スコア952

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

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

nagais

2018/01/17 12:13

回答ありがとうございます。 エラー画像を追加しましたのでご確認ください。
nagais

2018/01/18 00:53

()内はint型でないといけないようです。932というコードページIDがshift_jisを扱うための番号でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問