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

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

ただいまの
回答率

90.35%

  • C#

    7651questions

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

時間制限制限で上手く作動しない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 300

YukioMaki

score 9

Unity5.38を使ってC#で下記のスクリプトを書いたのですが、
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Check : MonoBehaviour
{
public GameObject IP;
public InputManager scripta;
public int A;
public GameObject ST;
public Stage2 scripta1;
public Text scoreText;
public int score = 0;
public int T;
private SoundManager sound;
public float time = 0.0f;
void Start()
{
scoreText.text = " ";
}

// Update is called once per frame

void Update()
{
if (Input.anyKey)
{
sound = GameObject.Find("SoundManager").GetComponent<SoundManager>();

IP = GameObject.Find("InputManager");
scripta = IP.GetComponent<InputManager>();
A = scripta.Answer;
score = A;
scoreText.text = " " + score.ToString();
if (time < 5.0f)       //時間制限
{
time += Time.deltaTime;
if (time >= 5.0f)
{
Debug.Log(A);
}
}

ST = GameObject.Find("Stage");
scripta1 = ST.GetComponent<Stage2>();
T = scripta1.total;
if (A == T)
{
sound.PlayBreak();
Debug.Log("O.K");
}
else
{
sound.PlayMiss();
print("Mistake");
}

}
scoreをシーンに表示してからsoundが鳴るように、時間制限を入れたのですが、コンパイルは通ったのですが、表示とsoundが同時で時間制限が働いていないようです。
誰か改善方法を教えてもらえませんか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

コルーチンで待つというのはどうでしょうか?

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Check : MonoBehaviour
{
    public GameObject IP;
    public InputManager scripta;
    public int A;
    public GameObject ST;
    public Stage2 scripta1;
    public Text scoreText;
    public int score = 0;
    public int T;
    private SoundManager sound;
    public float time = 0.0f;

    private float waitTime = 2.0f;//変更部分1

    void Start()
    {
        scoreText.text = " ";
    }

    // Update is called once per frame

    void Update()
    {
        if (Input.anyKey)
        {
            StartCoroutine(CheckCorutine());//コルーチンに変更
        }
    }

    IEnumerator CheckCorutine()
    {
        sound = GameObject.Find("SoundManager").GetComponent<SoundManager>();

        IP = GameObject.Find("InputManager");
        scripta = IP.GetComponent<InputManager>();
        A = scripta.Answer;
        score = A;
        scoreText.text = " " + score.ToString();

        yield return new WaitForSeconds(waitTime);//変更部分2
        /*
        if (time < 5.0f)       //時間制限
        {
            time += Time.deltaTime;
            if (time >= 5.0f)
            {
                Debug.Log(A);
            }
        }
        */
        ST = GameObject.Find("Stage");
        scripta1 = ST.GetComponent<Stage2>();
        T = scripta1.total;
        if (A == T)
        {
            sound.PlayBreak();
            Debug.Log("O.K");
        }
        else
        {
            sound.PlayMiss();
            print("Mistake");
        }
    }
}

上記はスコア表示の2秒後に音が鳴ると思うので待ち時間を変えたい場合は「private float waitTime = 2.0f;」の部分を変えて下さい。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/05 08:44

    ha_waさん回答ありがとうございます。
    スクリプトの変更まで書いていただき、初心者の私には本当に助かりました。
    早速、支持の箇所を変更したらうまく作動しました。
    これを機会にコールチンをもう1度勉強します。
    これからもよろしくお願いします。

    キャンセル

0

if (time < 5.0f) に「時間制限」のコメントがあるのでもしかしたらそれの else で 後半の
ST = GameObject.Find("Stage"); 以降を囲んでやればやりたい事が実現できる?…のかな?

else { // ←これを挿入.

  // ↓ここからは元々の処理↓.
  ST = GameObject.Find("Stage");
  scripta1 = ST.GetComponent<Stage2>();
  T = scripta1.total;
  if (A == T)
  {
    sound.PlayBreak();
    Debug.Log("O.K");
  }
  else
  {
    sound.PlayMiss();
    print("Mistake");
  }
  // ↑ここまでは元々の処理↑.

} // ←これを挿入.

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/04 14:53

    HiroshiWatanabeさん回答ありがとうございます。
    ご指摘の場所にelseを挿入してみましたが、表示とsoundが同時で変わらないです。
    他に問題点に気が付きましたら、また回答をお願いします。

    キャンセル

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

  • C#

    7651questions

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