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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

1331閲覧

クリック数による表示・非表示の反復処理(カウント数が最大値になったら0からに戻したい)

1nanana

総合スコア15

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2020/10/17 09:51

編集2020/10/17 09:52

クリック数によってオブジェクトの表示・非表示を切り替えたいと思っています。
そこでカウンター機能を使って一回目のクリックで非表示、二回目のクリックで表示をする処理を行いました。ここまでで実行すると、1回目で非表示、2回目で表示まではされました。3回以降は反応しませんでした。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class FirstFloor: MonoBehaviour 6{ 7 //表示・非表示オブジェクト 8 public GameObject HImage, EImage, NImage; 9 10 //押された回数を格納する変数 11  int counter = 0; 12 13 const int counterMax = 2; //最大値 14 15 // Detects clicks from the mouse and prints a message 16 // depending on the click detected. 17 18 // Start is called before the first frame update 19 void Start() 20 { 21 HImage.SetActive (false); 22 EImage.SetActive (false); 23 NImage.SetActive (false); 24 } 25 26 27 public void Click() 28 { 29 if (Input.GetMouseButtonUp(0)) 30 { 31 counter++; 32 33 HImage.SetActive(true); 34 EImage.SetActive(true); 35 NImage.SetActive(true); 36 37 if (counter >= counterMax) 38 { 39 40 HImage.SetActive(false); 41 EImage.SetActive(false); 42 NImage.SetActive(false); 43 } 44 } 45 46 } 47}

繰り返すには反復処理を行えばいいかなと思いWhile(true)で行ってみました。(While(true)にすると永遠ループになるためUnityがフリーズするとは書かれていましたが、If設定しているので大丈夫かなと思ったんです、、。)案の定フリーズしました。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class FirstFloor: MonoBehaviour 6{ 7 //表示・非表示オブジェクト 8 public GameObject HImage, EImage, NImage; 9 10 //押された回数を格納する変数 11  int counter = 0; 12 13 const int counterMax = 2; //最大値 14 15 // Detects clicks from the mouse and prints a message 16 // depending on the click detected. 17 18 // Start is called before the first frame update 19 void Start() 20 { 21 HImage.SetActive (false); 22 EImage.SetActive (false); 23 NImage.SetActive (false); 24 } 25 26 27 public void Click() 28 { 29 while (true) 30 { 31 if (Input.GetMouseButtonUp(0)) 32 { 33 counter++; 34 35 HImage.SetActive(true); 36 EImage.SetActive(true); 37 NImage.SetActive(true); 38 39 if (counter >= counterMax) 40 { 41 42 HImage.SetActive(false); 43 EImage.SetActive(false); 44 NImage.SetActive(false); 45 } 46 } 47 } 48 } 49}

二回目クリックした後、もう一度この処理をゼロから繰り返すようにしたいのですがどのように知ればいいでしょうか。
(言い換えると、カウンター数が最大値の2になると、カウント0に戻るようにしたいです。)

Void Updateにいれればいいのかなとも思ったのですが、オブジェクトを選択する際にEvent Triggerを使って、Click()を指定してそこをクリックすると処理が行われるようにしているのでUpdateではできないのでは??と疑問を持っています。(Unity初心者なのでわかっていないかもしれません、、)

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

みやみにコードを変更する前に、何が起きているか、理解するようにしましょう。
今回なら、クリック毎に、どのような処理がなされているか、です。

クリック前
各オブジェクトが非表示になっている。

クリック1回目
counter は、0から1になる。
各オブジェクトが表示に変更される。
counterが1なので、ifの中は実行されない。
結果、各オブジェクトが表示される。

クリック2回目
counter は、1から2になる。
各オブジェクトが表示に設定される。
counterが2なので、ifの中が実行され、各オブジェクトが非表示に変更される。
結果、各オブジェクトが表示されない。

クリック3回目
counter は、2から3になる。
各オブジェクトが表示に変更される。
counterが3なので、ifの中が実行され、各オブジェクトが非表示に戻される。
結果、各オブジェクトが表示されない。

ここまでを把握したら、どうすれば、3回目以降が希望通りになるのか、考えましょう。

容易に思いつけるかと思いますので、あえて修正方法は省かせていただきます。

投稿2020/10/17 10:13

YT0014

総合スコア1708

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

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

1nanana

2020/10/17 12:10

ありがとうございます。
guest

0

ベストアンサー

二回目クリックした後、もう一度この処理をゼロから繰り返すようにしたいのですがどのように知ればいいでしょうか。
(言い換えると、カウンター数が最大値の2になると、カウント0に戻るようにしたいです。)

C#

1 if (counter >= counterMax) 2 { 3 4 HImage.SetActive(false); 5 EImage.SetActive(false); 6 NImage.SetActive(false); 7 8 counter = 0; // 追加 9 }

投稿2020/10/17 10:02

fiveHundred

総合スコア9805

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

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

1nanana

2020/10/17 12:09

ありがとうございます!できました! 一行でできるなんて、、、もっと勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問