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

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

ただいまの
回答率

90.03%

UnityのGetComponentを使用した処理について

解決済

回答 2

投稿 編集

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

R_1080

score 12

if文とGetComponentを使用し、Aのボタンが押されたら指定の秒数後にObjectが現れ、その指定の秒数に満たない時間でBボタンを押したらAのボタンの処理(指定時間後にObjectを表示)を停止するというものを作成したのですが、指定時間に満たない時間でBボタンを押しても、処理が停止せずに指定の時間が経過したらObjectが表示されてしまいます。
下記サイト等参考にさせて頂いたのですが上記のような状態になってしまいます。
参考サイト
参考サイト
呼び出そうとしているScript(Bボタン)に複数Scriptがついているのですが、これも原因の一つでしょうか。
何卒ご教示のほどよろしくお願いいたします。

AボタンについているScriptです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AButtonInvoke : MonoBehaviour
{
    // オブジェクト指定
    public GameObject AButtonControl;

    public GameObject MainObject;

    public GameObject AButton;

    public GameObject BButton;


    // ボタンをクリックした時の処理
    public void OnClick()
    {
        StartCoroutine("AbuttonPush");
    }
// 現れる時間指定
    IEnumerator AbuttonPush()
    {
    // 現れる時間
        yield return new WaitForSeconds(13f);

        if (Interruption_Controller.GetComponent<Interruption>()) yield break;
        {
            Debug.Log("停止した");
        }
           yield return new WaitForSeconds(13f);
            MainObject.gameObject.SetActive(true);

Bボタンに付けているScriptです。

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

public class BButtonControl : MonoBehaviour
{

    // ボタンをクリックした時の処理
    public void OnClick()
    {
        // ボタンを非表示にする
           gameObject.SetActive(false);
      TransparentCanvas.SetActive("MainObject", true);

        // ボタンを表示する
        TransparentCanvas.SetActive("AButton", true);
    }
}

``` InterruptionScriptです。

C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class Interruption : MonoBehaviour
{

    // オブジェクト指定
    public GameObject AButtonControl;

    public GameObject MainObject;

    public GameObject AButton;

    public GameObject BButton;

    // オブジェクト非表示
    void Start()
    {

        MainObject.gameObject.SetActive(false);

    }
// ボタンをクリックした時の処理
    public void OnClick()
    {
        paused = true;
        StartCoroutine("startPush");
        gameObject.SetActive(false);
    }

    // 現れる時間指定
    IEnumerator startPush()
    {
        yield return new WaitForSeconds(1f);
        MainMenu_Scene.gameObject.SetActive(true);
// Objectを表示する
    IEnumerator startPush()
      {
        yield return new WaitForSeconds(1f);
        MainObject.gameObject.SetActive(true);

     yield return new WaitForSeconds(1f);
        TransparentCanvas.SetActive("AButton", true);


      }
}


上記が付けている物になります。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

check解決した方法

0

すみません。無事解決しました。
参照するオブジェクトの間に別のオブジェクトを挿んでいたのですが、Scriptがその挿んでいるオブジェクトを参照しようとしていたため、正常に動作しないことが判明しました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

これが原因かどうかは分かりませんが

        if (Interruption_Controller.GetComponent<Interruption>()) yield break;
        {
            Debug.Log("停止した");
        }

上記は以下と同じになりますが、意図した内容でしょうか?

        if (Interruption_Controller.GetComponent<Interruption>())
        {
            yield break;
        }

        // { } はif文と関係なくなっている
        {
            Debug.Log("停止した");
        }

もし、ここが原因でないのであれば、Objectを表示する処理やBボタンの処理、Interruptionクラスのスクリプトも質問文に記載してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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