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

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

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

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1452閲覧

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

R_1080

総合スコア18

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/01/23 06:58

編集2019/01/24 02:38

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

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

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class AButtonInvoke : MonoBehaviour 6{ 7 // オブジェクト指定 8 public GameObject AButtonControl; 9 10 public GameObject MainObject; 11 12 public GameObject AButton; 13 14 public GameObject BButton; 15 16 17 // ボタンをクリックした時の処理 18 public void OnClick() 19 { 20 StartCoroutine("AbuttonPush"); 21 } 22// 現れる時間指定 23 IEnumerator AbuttonPush() 24 { 25    // 現れる時間 26 yield return new WaitForSeconds(13f); 27 28 if (Interruption_Controller.GetComponent<Interruption>()) yield break; 29 { 30 Debug.Log("停止した"); 31 } 32 yield return new WaitForSeconds(13f); 33 MainObject.gameObject.SetActive(true);

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

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class BButtonControl : MonoBehaviour 7{ 8 9 // ボタンをクリックした時の処理 10 public void OnClick() 11 { 12 // ボタンを非表示にする 13 gameObject.SetActive(false); 14      TransparentCanvas.SetActive("MainObject", true); 15 16 // ボタンを表示する 17 TransparentCanvas.SetActive("AButton", true); 18 } 19}

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);   } } ``` 上記が付けている物になります。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

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

投稿2019/01/28 00:50

R_1080

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

C#

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

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

C#

1 if (Interruption_Controller.GetComponent<Interruption>()) 2 { 3 yield break; 4 } 5 6 // { } はif文と関係なくなっている 7 { 8 Debug.Log("停止した"); 9 }

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

投稿2019/01/23 07:11

fiveHundred

総合スコア9803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問