###<実現したいこと>
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が実行されてしまった。
回答1件
あなたの回答
tips
プレビュー