#UIButtonにスクリプトをアタッチするとNullになる
前提・実現したいこと
UnityとC#にて、CSVを用いたシンプルなクイズアプリを制作しています。CSVの分解やGameScean上で表示するところまでは問題なく、Buttonも反応する(色が変わる)のですが、UI ButtonにスクリプトをアタッチするとNullの表示が出てしまい、Buttonも全く反応しなくなります。エラーの出る部分はクイズ問題や選択肢を表示させるために記述してあるGetComponentの部分です。
下記スクリプトの下の方にあるClickAnswerButton()がButtonにさせたい動作の内容です。どうすればエラーなくアタッチできるでしょうか?また、Buttonにアタッチしなければ何もエラーは起きないのに、GetcomponentにNullが出る理由はスクリプトの記述ミスなのでしょうか?
初めての質問で、ちゃんと伝わるよう説明できているか不安ですが、どなたかご回答いただけると幸いです。
よろしくお願いします。
##エラー内容
NullReferenceException: Object reference not set to an instance of an object
CSVScript.Start () (at Assets/CSVScript.cs:89)
##試したこと
Buttonに直接スクリプトをアタッチせずに、空のオブジェクトを作成し、C#スクリプトをアタッチ、そしてそれをOnClick()にアタッチしてみましたが、同じ結果になりました。また、Buttonの設定が間違っていないかチェックすべきことをいくつかのサイトから確認しましたが、問題ありませんでした。
##該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class CSVScript : MonoBehaviour 8{ 9 public TextAsset CSV; 10 public Text value3, value4, value5; 11 public static int nowIndex = 1; 12 public static string CorrectAnswerText; 13 14 public Question[] questions = new Question[500]; 15 16 public static string QuestionText { get; private set; } 17 18 void Start() 19 { 20 string[] csv = CSV.text.Split('\n'); 21 Debug.Log(csv.Length); 22 23 for (int i = 1; i < csv.Length; i++) 24 { 25 string[] values = csv[i].Split(','); 26 27 string category = values[0]; 28 29 int level = 0; 30 if (values[1] == "初級") 31 { 32 level = 1; 33 } 34 else if (values[1] == "中級") 35 { 36 level = 2; 37 } 38 else if (values[1] == "上級") 39 { 40 level = 3; 41 } 42 43 string questionText = values[2]; 44 45 //values[3]A values[4]B values[5] 46 string[] answers = { values[3], values[4], values[5] }; 47 48 49 //正解の配列番号 Aが0、Bが1、Cが2 50 int answerIndex = 0; 51 if (values[6] == "A") 52 { 53 answerIndex = 0; 54 } 55 else if (values[6] == "B") 56 { 57 answerIndex = 1; 58 } 59 else 60 { 61 answerIndex = 2; 62 } 63 64 65 66 string comment = values[7]; 67 68 Question q = new Question(category, level, questionText, answers, answerIndex, comment); 69 70 questions[i] = q; 71 } 72 73 questions[nowIndex].ShowLog(); 74 75 76 GetComponent<Text>().text = questions[nowIndex].question; 77 value3.text = questions[nowIndex].answers[0]; 78 value4.text = questions[nowIndex].answers[1]; 79 value5.text = questions[nowIndex].answers[2]; 80 81 } 82 83 public void OnClickAnswerButton(int answerIndex) 84 { 85 CorrectAnswerText = questions[nowIndex].GetCorrectAnswerText(); 86 87 if (questions[nowIndex].answerIndex == answerIndex) 88 { 89 SceneManager.LoadScene("correct"); 90 } 91 else 92 { 93 SceneManager.LoadScene("incorrect"); 94 } 95 96 } 97 98 // Update is called once per frame 99 void Update() 100 { 101 102 } 103} 104
回答1件
あなたの回答
tips
プレビュー