前提、実現したいこと
unityを使い4択のクイズゲームを作成しています。
クイズの正解数をカウントし最後に何問正解したかを表示したいです。
ですが、得点が2点づつカウントされてしまいます。
これを1点づつ増やしたいです。
なぜこうなるのか、解決のヒントなどを教えてくださると幸いです。
https://engineer.blog.lancers.jp/ios/ugui_quiz_unity/
こちらのサイトを参考に作っていました。
エラーなどは出ていないです。
発生している問題
C#
11 2UnityEngine.Debug:Log (object) 3ResultMgr:Start () (at Assets/Scripts/ResultMgr.cs:33)
C#
12 2UnityEngine.Debug:Log (object) 3ResultMgr:Start () (at Assets/Scripts/ResultMgr.cs:33)
1問正解するごとに2回出てきます。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ResultMgr : MonoBehaviour 7{ 8 //他のスクリプトからも参照可能な変数宣言 9 public static string g_judgeData; 10 public static int g_scoreData; 11 12 13 void Start() 14 { 15 //デフォルトは正解、不正解なら画像と文言を切り替える 16 if (g_judgeData == "不正解") 17 { 18 //現在描画している画像を取得 19 SpriteRenderer judgeImage = GameObject.Find("JudgeUI/JudgeImage").GetComponent<SpriteRenderer>(); 20 //Resourcesから指定した名前の画像データをロード 21 Sprite loadingImage = Resources.Load<Sprite>("batsu"); 22 //画像を置換 23 judgeImage.sprite = loadingImage; 24 //表示テキストを取得して置換 25 Text judgeLabel = GameObject.Find("JudgeUI/JudgeLabel").GetComponent<Text>(); 26 judgeLabel.text = "不正解"; 27 } 28 else if (g_judgeData == "正解") 29 { 30 //正解であればScoreを足す 31 g_scoreData++; 32 Debug.Log(g_scoreData); 33 } 34 } 35 36 //他のスクリプトからも参照可能な関数宣言 37 public static void SetJudgeData(string judgeData) 38 { 39 g_judgeData = judgeData; 40 } 41 42 public static int GetScoreData() 43 { 44 return g_scoreData; 45 } 46 47 public static int SetScoreData(int scoreData) 48 { 49 g_scoreData = scoreData; 50 return g_scoreData; 51 } 52}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Score : MonoBehaviour 7{ 8 // Use this for initialization 9 void Start() 10 { 11 //スコア表示用のゲームオブジェクトを取得 12 Text scoreLabel = GameObject.Find("Canvas/Score").GetComponent<Text>(); 13 scoreLabel.color = Color.red; 14 //グローバルに宣言したスコアをResultMgrのスクリプトから読み込む 15 int Score = ResultMgr.GetScoreData(); 16 scoreLabel.text = Score.ToString() + " 問正解"; 17 } 18}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6 7public class Judge1 : MonoBehaviour 8{ 9 10 QuizMgr quizMgr; 11 string answerText; 12 13 void Start() 14 { 15 quizMgr = GameObject.Find("Main Camera").GetComponent<QuizMgr>(); 16 answerText = quizMgr.AnswerText; 17 } 18 19 //選択したボタンのテキストラベルと正解のテキストを比較して正誤を判定 20 public void Answer() 21 { 22 //選択したボタンのテキストを取得する 23 Text selectedBtn = this.GetComponentInChildren<Text>(); 24 Debug.Log("セレクト'" + selectedBtn.text + "'"); 25 Debug.Log("アンサー'" + answerText + "'"); 26 27 if (answerText == selectedBtn.text){ 28 ResultMgr.SetJudgeData("正解"); 29 Debug.Log("正解"); 30 Application.LoadLevel("Result1"); 31 } else { 32 ResultMgr.SetJudgeData("不正解"); 33 Debug.Log("不正解"); 34 Application.LoadLevel("Result1"); 35 } 36 } 37}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6using System.Linq; 7 8public class QuizMgr : MonoBehaviour 9{ 10 public string dataName; 11 public string title; 12 public TextAsset csvFile; 13 public List<string[]> csvDatas = new List<string[]>(); 14 public int height = 0; 15 public int i, j = 0; 16 public int k = 0; 17 internal Text ansLabel; 18 public string AnswerText; 19 public string Kaisetsubun; 20 const int size = 5; 21 22 23 void Start() 24 { 25 title = "theme_"; 26 csvFile = Resources.Load("CSV/" + title + dataName) as TextAsset; 27 StringReader reader = new StringReader(csvFile.text); 28 29 while (reader.Peek() > -1) 30 { 31 string line = reader.ReadLine(); 32 csvDatas.Add(line.Split(',')); 33 Debug.Log("reading:" + height); 34 height++; 35 } 36 37 for (i = 0; i < height; i++) 38 { 39 for (j = 0; j < size; j++) 40 { 41 Debug.Log("csvDatas[" + i + "][" + j + "]:" + csvDatas[i][j]); 42 } 43 } 44 45 QuestionLabelSet(); 46 AnswerLabelSet(); 47 AnswerSet(); 48 } 49 50 51 public void QuestionLabelSet() 52 { 53 csvDatas[k] = csvDatas[Random.Range(0, 9)]; 54 55 //特定の名前のオブジェクトを検索してアクセス 56 Text qLabel = GameObject.Find("Quiz/Image/QLabel").GetComponentInChildren<Text>(); 57 //データをセットすることで、既存情報を上書きできる 58 qLabel.text = csvDatas[k][0]; 59 } 60 61 public void AnswerLabelSet() 62 { 63 //問題文に対応した答えをそれぞれのuGUIボタンにセット 64 string[] array = new string[] { csvDatas[k][1], csvDatas[k][2], csvDatas[k][3], csvDatas[k][4] }; 65 66 //問題文をシャッフル 67 array = array.OrderBy(x => System.Guid.NewGuid()).ToArray(); 68 69 70 //ボタンが4つあるのでそれぞれ代入 71 for (int i = 1; i <= 4; i++) 72 { 73 Text ansLabel = GameObject.Find("Quiz/AnsButton" + i).GetComponentInChildren<Text>(); 74 ansLabel.text = array[i - 1]; 75 } 76 } 77 78 public void AnswerSet() 79 { 80 //答えとなるcsvデータを変数として型に代入する 81 AnswerText = csvDatas[k][1]; 82 Debug.Log ("アンサーセット'" + AnswerText + "'"); 83 84 Kaisetsubun = csvDatas[k][5]; 85 Debug.Log(Kaisetsubun); 86 } 87 88 void Update() { } 89}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6using System.Linq; 7 8public class Game1 : MonoBehaviour 9{ 10 11 public static int qCount; 12 13 public void NextQuiz() 14 { 15 if (Application.loadedLevelName == "Result1") 16 { 17 if (qCount < 5) 18 { 19 qCount++; 20 Application.LoadLevel("1F"); 21 } 22 else 23 { 24 qCount = 0; 25 Application.LoadLevel("Score1"); 26 } 27 } 28 } 29 30 31}
補足情報
unityは2021.2.2f1です。
勉強し始めて間もなく、知識不足なのですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/26 06:05
2021/11/26 07:41
2021/11/26 08:02
2021/11/26 08:24 編集
2021/11/27 08:34
2021/11/28 01:45
2021/11/28 02:39
2021/11/28 03:01
2021/11/29 02:08
2021/11/29 05:56
2021/11/29 06:13