Unityでクイズゲームを作ろうと考えております。
4択問題のプログラムについて、ボタンを4つ配置し、
何れかのボタンが押されたら処理を行う記述としたいのですが、
コルーチンの使い方がいまいちつかめず、うまく処理を行うことが出来ません。
うまい処理の仕方について、ご教授願えると幸いです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
public class Quiz1 : MonoBehaviour {
TextAsset csvFile; List<string[]> quizDatas = new List<string[]>(); public GameObject ansbutton1; public GameObject ansbutton2; public GameObject ansbutton3; public GameObject ansbutton4; public int kakunina; public int kakuninb; public int kakuninc; public int kakunind; void Start () { csvFile = Resources.Load("samplequiza") as TextAsset; StringReader reader = new StringReader(csvFile.text); while (reader.Peek() != -1) { string line = reader.ReadLine(); quizDatas.Add(line.Split(',')); } int min = 0; int max = quizDatas.Count; int n; n = UnityEngine.Random.Range(min , max ); Text qLabel = GameObject.Find("Canvas/QLabel").GetComponentInChildren<Text>(); Text ansLavel1 = GameObject.Find("Canvas/AnsButton1").GetComponentInChildren<Text>(); Text ansLavel2 = GameObject.Find("Canvas/AnsButton2").GetComponentInChildren<Text>(); Text ansLavel3 = GameObject.Find("Canvas/AnsButton3").GetComponentInChildren<Text>(); Text ansLavel4 = GameObject.Find("Canvas/AnsButton4").GetComponentInChildren<Text>(); for (int i = 0;i<1;i++) { qLabel.text = quizDatas[n][1]; ansLavel1.text = quizDatas[n][2]; ansLavel2.text = quizDatas[n][3]; ansLavel3.text = quizDatas[n][4]; ansLavel4.text = quizDatas[n][5]; ansbutton1 = GameObject.Find("AnsButton1"); ansbutton2 = GameObject.Find("AnsButton2"); ansbutton3 = GameObject.Find("AnsButton3"); ansbutton4 = GameObject.Find("AnsButton4"); //label; ```StartCoroutine("Hoge");`` kakunina = ansbutton1.GetComponent<Quizansbutton>().kioku; kakuninb = ansbutton2.GetComponent<Quizansbutton2>().kioku; kakuninc = ansbutton3.GetComponent<Quizansbutton3>().kioku; kakunind = ansbutton4.GetComponent<Quizansbutton4>().kioku; if (kakunina != 0 || kakuninb !=0 || kakuninc != 0 || kakunind != 0) { Debug.Log("処理"); //goto label; } } } // Update is called once per frame void Update () { } ```IEnumerator Hoge () { while (!Input.GetMouseButtonDown(0)) { yield return null; } }
``
}
ソースコードの前後に```を付けて見やすくして頂けると助かります。
ご指摘ありがとうございます
Unity(uGUI)ではボタン入力を待つのではなく、「ボタンが押された時に特定のメソッドを呼ぶ」という考え方をします。なので(ボタン入力を受け取る部分に関しては)基本的にコルーチンは使用しません。「unity ボタン」でGoogle検索してみてください。
メインのほうで繰り返しで処理を行う中で、ボタンを押したらボタン側のスクリプトで処理を行い、その後繰り返し処理の中に復帰することは可能ですか?
出来なくはないです。(izmktrさんの回答のように「ボタンが押された/離された」を保存する変数を作って、ループ内でそれをチェックする等) ただ回りくどい書き方になるので、本当にそれでいいか設計を見直した方が良いかもしれません。
回答1件
あなたの回答
tips
プレビュー