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

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

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

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

unityクイズゲームで正解数を正しく表示させたい

taaiii
taaiii

総合スコア6

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

689閲覧

投稿2021/11/24 01:51

編集2021/11/29 01:57

前提、実現したいこと

unityを使い4択のクイズゲームを作成しています。

クイズの正解数をカウントし最後に何問正解したかを表示したいです。
ですが、得点が2点づつカウントされてしまいます。
これを1点づつ増やしたいです。

なぜこうなるのか、解決のヒントなどを教えてくださると幸いです。

https://engineer.blog.lancers.jp/ios/ugui_quiz_unity/
こちらのサイトを参考に作っていました。

エラーなどは出ていないです。

発生している問題

C#

1 UnityEngine.Debug:Log (object) ResultMgr:Start () (at Assets/Scripts/ResultMgr.cs:33)

C#

2 UnityEngine.Debug:Log (object) ResultMgr:Start () (at Assets/Scripts/ResultMgr.cs:33)

1問正解するごとに2回出てきます。

該当のソースコード

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ResultMgr : MonoBehaviour { //他のスクリプトからも参照可能な変数宣言 public static string g_judgeData; public static int g_scoreData; void Start() { //デフォルトは正解、不正解なら画像と文言を切り替える if (g_judgeData == "不正解") { //現在描画している画像を取得 SpriteRenderer judgeImage = GameObject.Find("JudgeUI/JudgeImage").GetComponent<SpriteRenderer>(); //Resourcesから指定した名前の画像データをロード Sprite loadingImage = Resources.Load<Sprite>("batsu"); //画像を置換 judgeImage.sprite = loadingImage; //表示テキストを取得して置換 Text judgeLabel = GameObject.Find("JudgeUI/JudgeLabel").GetComponent<Text>(); judgeLabel.text = "不正解"; } else if (g_judgeData == "正解") { //正解であればScoreを足す g_scoreData++; Debug.Log(g_scoreData); } } //他のスクリプトからも参照可能な関数宣言 public static void SetJudgeData(string judgeData) { g_judgeData = judgeData; } public static int GetScoreData() { return g_scoreData; } public static int SetScoreData(int scoreData) { g_scoreData = scoreData; return g_scoreData; } }

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Score : MonoBehaviour { // Use this for initialization void Start() { //スコア表示用のゲームオブジェクトを取得 Text scoreLabel = GameObject.Find("Canvas/Score").GetComponent<Text>(); scoreLabel.color = Color.red; //グローバルに宣言したスコアをResultMgrのスクリプトから読み込む int Score = ResultMgr.GetScoreData(); scoreLabel.text = Score.ToString() + " 問正解"; } }

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; public class Judge1 : MonoBehaviour { QuizMgr quizMgr; string answerText; void Start() { quizMgr = GameObject.Find("Main Camera").GetComponent<QuizMgr>(); answerText = quizMgr.AnswerText; } //選択したボタンのテキストラベルと正解のテキストを比較して正誤を判定 public void Answer() { //選択したボタンのテキストを取得する Text selectedBtn = this.GetComponentInChildren<Text>(); Debug.Log("セレクト'" + selectedBtn.text + "'"); Debug.Log("アンサー'" + answerText + "'"); if (answerText == selectedBtn.text){ ResultMgr.SetJudgeData("正解"); Debug.Log("正解"); Application.LoadLevel("Result1"); } else { ResultMgr.SetJudgeData("不正解"); Debug.Log("不正解"); Application.LoadLevel("Result1"); } } }

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System.Linq; public class QuizMgr : MonoBehaviour { public string dataName; public string title; public TextAsset csvFile; public List<string[]> csvDatas = new List<string[]>(); public int height = 0; public int i, j = 0; public int k = 0; internal Text ansLabel; public string AnswerText; public string Kaisetsubun; const int size = 5; void Start() { title = "theme_"; csvFile = Resources.Load("CSV/" + title + dataName) as TextAsset; StringReader reader = new StringReader(csvFile.text); while (reader.Peek() > -1) { string line = reader.ReadLine(); csvDatas.Add(line.Split(',')); Debug.Log("reading:" + height); height++; } for (i = 0; i < height; i++) { for (j = 0; j < size; j++) { Debug.Log("csvDatas[" + i + "][" + j + "]:" + csvDatas[i][j]); } } QuestionLabelSet(); AnswerLabelSet(); AnswerSet(); } public void QuestionLabelSet() { csvDatas[k] = csvDatas[Random.Range(0, 9)]; //特定の名前のオブジェクトを検索してアクセス Text qLabel = GameObject.Find("Quiz/Image/QLabel").GetComponentInChildren<Text>(); //データをセットすることで、既存情報を上書きできる qLabel.text = csvDatas[k][0]; } public void AnswerLabelSet() { //問題文に対応した答えをそれぞれのuGUIボタンにセット string[] array = new string[] { csvDatas[k][1], csvDatas[k][2], csvDatas[k][3], csvDatas[k][4] }; //問題文をシャッフル array = array.OrderBy(x => System.Guid.NewGuid()).ToArray(); //ボタンが4つあるのでそれぞれ代入 for (int i = 1; i <= 4; i++) { Text ansLabel = GameObject.Find("Quiz/AnsButton" + i).GetComponentInChildren<Text>(); ansLabel.text = array[i - 1]; } } public void AnswerSet() { //答えとなるcsvデータを変数として型に代入する AnswerText = csvDatas[k][1]; Debug.Log ("アンサーセット'" + AnswerText + "'"); Kaisetsubun = csvDatas[k][5]; Debug.Log(Kaisetsubun); } void Update() { } }

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System.Linq; public class Game1 : MonoBehaviour { public static int qCount; public void NextQuiz() { if (Application.loadedLevelName == "Result1") { if (qCount < 5) { qCount++; Application.LoadLevel("1F"); } else { qCount = 0; Application.LoadLevel("Score1"); } } } }

補足情報

unityは2021.2.2f1です。

勉強し始めて間もなく、知識不足なのですがよろしくお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。