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

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

ただいまの
回答率

89.98%

Unity voidが呼び出されない件

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 519

nagais

score 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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • himakuma

    2018/01/17 21:00

    ※起動して即終了

    キャンセル

  • nagais

    2018/01/17 21:04

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

    キャンセル

  • nagais

    2018/01/17 21:04

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

    キャンセル

回答 2

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/18 10:00

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

    キャンセル

  • 2018/01/18 10:06

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

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/17 21:13

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

    キャンセル

  • 2018/01/18 09:53

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

    キャンセル

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る