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

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

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

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

Unity

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

Q&A

解決済

2回答

1223閲覧

Unity ボタン について

R_1080

総合スコア18

C#

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

Unity

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

0グッド

0クリップ

投稿2018/12/11 01:06

編集2018/12/11 01:49

ButtonAを押したらGameObjectが時間差で現れるという動きをしたいのですが、うまくいきません。
以下のScriptを記入したのですが、ここからどうButtonAをクリックしたら時間差で現れるようになるでしょうか。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class UseCasesTimeLagControl : MonoBehaviour { 6 7 public GameObject CubeA; 8 public GameObject CubeB; 9 public GameObject CubeC; 10 public GameObject CubeD; 11 public GameObject CubeE; 12 13 14 15 void Start() 16 { 17 StartCoroutine("UseCasesTimeLag"); 18 CubeA.gameObject.SetActive(false); 19 20 StartCoroutine("UseCasesTimeLag"); 21 CubeB.gameObject.SetActive(false); 22 23 StartCoroutine("UseCasesTimeLag"); 24 CubeC.gameObject.SetActive(false); 25 26 StartCoroutine("UseCasesTimeLag"); 27 CubeD.gameObject.SetActive(false); 28 29 StartCoroutine("UseCasesTimeLag"); 30 CubeE.gameObject.SetActive(false); 31 } 32 33 IEnumerator UseCasesTimeLag() 34 { 35 CubeA.gameObject.SetActive(false); 36 yield return new WaitForSeconds(1.0f); 37 CubeA.gameObject.SetActive(true); 38 39 CubeB.gameObject.SetActive(false); 40 yield return new WaitForSeconds(2.0f); 41 CubeB.gameObject.SetActive(true); 42 43 CubeC.gameObject.SetActive(false); 44 yield return new WaitForSeconds(3.0f); 45 CubeC.gameObject.SetActive(true); 46 47 CubeD.gameObject.SetActive(false); 48 yield return new WaitForSeconds(4.0f); 49 CubeD.gameObject.SetActive(true); 50 51 CubeE.gameObject.SetActive(false); 52 yield return new WaitForSeconds(5.0f); 53 CubeE.gameObject.SetActive(true); 54 55 } 56} 57

解決方法のご教授おねがいします。

失礼しました。
「Unityにて一定の時間経過後にButtonを表示させる」にて質問させていただいた際のご回答にてエラーは消えたのですが、Buttonを押していないにもかかわらず指定した時間がたつとButtonが現れるという事に気づきまして再度ご教示頂きたく上げさせていただきました。
新規ではなく、前回の場所で上げるべきでした。

以下追加文

C#

1public void OnClick() 2 { 3 // ボタンを非表示にする 4 gameObject.SetActive(false); 5 } 6を上記に記載したScriptに記入し、ButtonAを押したら非表示にするは出来たのですが、時間差指定したobjectはButtonAのアクションに関係なく時間がたてば現れてしまいまして。 7この文になにが足らないのかが分からなく。 8

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

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

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

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

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

Hawn

2018/12/11 01:29 編集

以前ご自身で質問していた「Unityにて一定の時間経過後にButtonを表示させる」が想定通り出来たのならば今回の質問やその何を意図して作成したのか判らないコードが出来上がったりしないと思いますが、前回の質問の内容は完遂しなかったのでしょうか?
izmktr

2018/12/11 01:34

「uGUI Button」あたりで検索すると使い方が出てきますけど、どのへんがわからないのでしょう?
guest

回答2

0

  • Startメソッドは「このスクリプトが付いたGameObjectが生成されたタイミング(かつAwakeの後)」に呼ばれる。
  • StartCoroutineは呼ばれたら即時実行される(その先のメソッド内で待機等を行う)。

なのでButtonを押していないにも関わらず指定した時間が経つとButtonが現れるのは当然です。
Startメソッドではなく「ボタンを押した時にStartCoroutineを実行」という形に変更すれば希望の処理になります。
具体的な方法は色々ありますので「unity ボタン」でGoogle検索してみてください。

投稿2018/12/11 01:52

sakura_hana

総合スコア11427

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

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

0

ベストアンサー

変な動作をするのはsakura_hanaさんが指摘されている部分なのでその辺りを理解するようにしてください。
どうしても現状自身で直すのが無理そうならば下記スクリプトで想定した動作になるか試して下さい。

C#

1using System.Collections; 2using UnityEngine; 3 4public class UseCasesTimeLagControl : MonoBehaviour 5{ 6 7 public GameObject CubeA; 8 public GameObject CubeB; 9 public GameObject CubeC; 10 public GameObject CubeD; 11 public GameObject CubeE; 12 13 void Start() 14 { 15 CubeA.gameObject.SetActive(false); 16 CubeB.gameObject.SetActive(false); 17 CubeC.gameObject.SetActive(false); 18 CubeD.gameObject.SetActive(false); 19 CubeE.gameObject.SetActive(false); 20 } 21 22 public void OnClick() 23 { 24 StartCoroutine("UseCasesTimeLag"); 25 } 26 27 IEnumerator UseCasesTimeLag() 28 { 29 yield return new WaitForSeconds(1.0f); 30 CubeA.gameObject.SetActive(true); 31 32 yield return new WaitForSeconds(2.0f); 33 CubeB.gameObject.SetActive(true); 34 35 yield return new WaitForSeconds(3.0f); 36 CubeC.gameObject.SetActive(true); 37 38 yield return new WaitForSeconds(4.0f); 39 CubeD.gameObject.SetActive(true); 40 41 yield return new WaitForSeconds(5.0f); 42 CubeE.gameObject.SetActive(true); 43 } 44}

投稿2018/12/11 01:53

編集2018/12/11 01:58
Hawn

総合スコア1222

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

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

R_1080

2018/12/11 02:04

上記Scriptにて想定した動作になりました。 根本的に書き方や仕組みが理解していないと再認識致しました。 お手数をおかけしまして申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問