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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

2929閲覧

[Unity]for文でbool型がfalse型になるまで待つIEnumeratorを作りたい。

ichigo_0308

総合スコア41

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/22 07:52

###<実現したいこと>
isLongTapがfalseになるまで待つMyLoopというIEnumeratorを作っている。
だが、visualstudioのfor文でエラーが起きている。
###<エラーコード>

代入、呼び出し、インクリメント、デクリメント、新しいオブジェクトの式のみがステートメントとして使用できます。 ;が必要です。 )'は無効です。

###<ソースコード>

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.SceneManagement; 7 8 9public class GameScript : MonoBehaviour 10{ 11 float longTapTime = 2.0f; 12 float nowTapTime; 13 float safeTime = 1.0f; 14 static int clearcount; 15 bool isLongtap; 16 bool isLongtapclear; 17 int level; 18 public Text countText; 19 public Text Text1; 20 public Text Text2; 21 public Text Text3; 22 public string Text1s; 23 public string Text2s; 24 public string Text3s; 25 public string count; 26 bool startflag = false; 27 public RectTransform clearcountR; 28 int challengecount; 29 // Start is called before the first frame update 30 void Start() 31 { 32 level = PlayerPrefs.GetInt("level"); 33 kabe(); 34 count3(); 35 Text1s = longTapTime.ToString(); 36 Text2s = safeTime.ToString(); 37 Text3s = clearcount.ToString(); 38 } 39 40 // Update is called once per frame 41 void Update() 42 { 43 Text1.text = Text1s; 44 Text2.text = Text2s; 45 Text3.text = "clearcount: " + Text3s; 46 if (startflag) 47 { 48 Text1.text = Text1s; 49 Text2.text = Text2s; 50 Text3.text = "clearcount: " + Text3s; 51 if (Input.GetMouseButton(0)) 52 { 53 isLongtapclear = false; 54 Text1.text = Text1s; 55 Text2.text = Text2s; 56 Text3.text = "clearcount: " + Text3s; 57 nowTapTime += Time.deltaTime; // 秒数をカウント 58 59 // タップし続けた時間が規定値を超えたらロングタップとして扱う 60 if (nowTapTime >= longTapTime && !isLongtap) 61 { 62 challengecount += 1; 63 nowTapTime = 0; 64 StartCoroutine("MyLoop"); // タイマーリセット 65 isLongtap = true; // ロングタップしたフラグを立てる // Prefabの作成 66 Debug.Log("Long Tap"); 67 } 68 69 } 70 else if (Input.GetMouseButtonUp(0)) 71 { 72 // クリックを終えたら初期化 73 nowTapTime = 0; 74 isLongtap = false; 75 } 76 77 } 78 } 79 public void kabe() 80 { 81 safeTime = 1.0f / (level + 1.0f); 82 safeTime *= 3.0f; 83 Debug.Log(safeTime); 84 } 85 public void count3() 86 { 87 count = "3"; 88 countText.text = count; 89 Invoke("count2", 1); 90 } 91 public void count2() 92 { 93 count = "2"; 94 countText.text = count; 95 Invoke("count1", 1); 96 } 97 public void count1() 98 { 99 count = "1"; 100 countText.text = count; 101 Invoke("start", 1); 102 } 103 public void start() 104 { 105 count = "start!"; 106 countText.text = count; 107 Invoke("startsetting", 1); 108 } 109 public void startsetting() 110 { 111 startflag = true; 112 113 } 114 IEnumerator WaitASecond() 115 { 116 yield return new WaitForSeconds(1f); 117 118 print((longTapTime - safeTime < nowTapTime) + " : " + (longTapTime + safeTime > nowTapTime) + " : " + !isLongtapclear); 119 if ((longTapTime - safeTime < nowTapTime) 120 && (longTapTime + safeTime > nowTapTime) && !isLongtapclear) 121 { 122 isLongtapclear = true; 123 Debug.Log("tapclear!"); 124 longTapTime = UnityEngine.Random.Range(2, 6); 125 Text1.text = Text1s; 126 clearcount += 1; 127 Text3.text = "clearcount: " + Text3s; 128 Text1s = longTapTime.ToString(); 129 Text2s = safeTime.ToString(); 130 Text3s = clearcount.ToString(); 131 132 } 133 else 134 { 135 Debug.Log("OUT"); 136 } 137 } 138 IEnumerator MyLoop() 139 { 140 for (isLongtap==false;) 141 { 142 yield return new WaitForSeconds(0.2f); 143 } 144 StartCoroutine("WaitASecond"); 145 } 146} 147

###<試したこと>
isLongtap=false;;にしてみると、エラーはなく正常に動いたが、何も起こずにWaitASecondが実行されてしまった。

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

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

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

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

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

Zuishin

2020/07/22 07:54

for 文の正しい書き方を調べてください。
ichigo_0308

2020/07/22 07:55

質問への追記・修正の依頼ではなく回答でお願いします。質問への追記・修正の依頼は回答をするところではありません。
Zuishin

2020/07/22 07:56

回答ではありません。自分ですぐに調べられることなので、教えるつもりはありません。
Zuishin

2020/07/22 07:56

今後このようなコメントが不要なら、まずすることをしてから質問することをお勧めします。
Zuishin

2020/07/22 11:04

前の質問を読んで、どんな質問者だったか思い出しました。質問者はその回答のベストアンサーと、それに自分でつけたコメントを読み直してみるといいんじゃないでしょうか。 https://teratail.com/questions/276056#reply-395086
guest

回答1

0

ベストアンサー

for文の()の中には
(int i = 0;i <= 10;i++)
のように、
(セクション1;セクション2;セクション3)
という形式で書くのが一般的です。
セクション1はループに入る時に一回だけ実行される文で、変数の初期化によく使われます。
セクション2はループを繰り返すか判定する文です。
1ループ終了毎に判定され、trueなら繰り返し、falseなら繰り返しを終了します。
セクション3はループ終了時に何を行うかです。

流れをリストにするとこうです。
0. セクション1が実行
0. for内の処理
0. セクション3が実行
0. セクション2がtrueなら2.へ、falseならループ終了

と、forの使い方はこんな感じですが、
質問内容から察するに、条件が満たされる限りループし続ける物を作りたいようです。
その場合はforよりwhileが適切です。
forをそのままwhilleに変えればうまく動くと思います。

追記
whileの流れはこうです。

  1. 条件式を判定し、trueなら進み、falseならループを抜ける。
  2. while内の処理
  3. 1.に戻る

投稿2020/07/22 08:10

編集2020/07/22 09:12
ozraru

総合スコア150

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

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

Zuishin

2020/07/22 08:56 編集

初期化式、ステートメント式、ブール式などはすべて文ではなく式です。「文1」ではなく「セクション1」と書くのが良いと思います。initializer には(初期化式でない)宣言文も書くことができます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/for > initializer セクション > ローカル ループ変数の宣言と初期化。 > 次に列挙した 0 個以上のステートメント式 (コンマ区切り)。 > condition セクション > ブール式にする必要があります。 > iterator セクション > 次のステートメント式を 0 個以上、コンマで区切って記述します。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/language-specification/statements#the-for-statement for の言語仕様
ozraru

2020/07/22 09:15

指摘ありがとうございます。 修正しました。 initializerについては初期化まですることが多いと思うので変更しませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問