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

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

ただいまの
回答率

88.58%

UNITYでボタン入力を待ちたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,318

musiruda

score 15

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; } }

}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • sakura_hana

    2018/11/05 10:06

    Unity(uGUI)ではボタン入力を待つのではなく、「ボタンが押された時に特定のメソッドを呼ぶ」という考え方をします。なので(ボタン入力を受け取る部分に関しては)基本的にコルーチンは使用しません。「unity ボタン」でGoogle検索してみてください。

    キャンセル

  • musiruda

    2018/11/06 20:22

    メインのほうで繰り返しで処理を行う中で、ボタンを押したらボタン側のスクリプトで処理を行い、その後繰り返し処理の中に復帰することは可能ですか?

    キャンセル

  • sakura_hana

    2018/11/08 11:05

    出来なくはないです。(izmktrさんの回答のように「ボタンが押された/離された」を保存する変数を作って、ループ内でそれをチェックする等) ただ回りくどい書き方になるので、本当にそれでいいか設計を見直した方が良いかもしれません。

    キャンセル

回答 1

checkベストアンサー

0

Input.GetMouseButtonDown(0)を使っていますが、これだと「マウスをクリックした」という条件で進みます。
「ボタンをクリックした」ですので、ボタン以外でただクリックしただけで進んでしまいます。
正しく、「ボタンがクリックされてない」間、無限ループしなければなりません。

そこで、メンバ変数buttonを作り、0を入れておきます。
ボタンが押されたら、押されたボタンに応じてbuttonの値を1~4の値に変えます。

あとは、Input.GetMouseButtonDownの場所を、buttonの値が0の間と書き換えればOKです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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