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

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

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

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

Q&A

解決済

3回答

2245閲覧

【unity】2回目のfor文でunityがフリーズしてしまう

hunuhunu

総合スコア6

Unity

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

0グッド

1クリップ

投稿2017/08/23 01:12

###前提・実現したいこと
5個のオブジェクトを全て違う位置に一気に表示し、そのオブジェクトが消えたらまた同じように表示するという処理をfor文で書いたのですが、2回目のfor文でフリーズしてしまいます

###発生している問題
1回目のfor文を終えたらIncorrectRandomFlgをfalseにし、オブジェクトを消す処理を終えてから、IncorrectRandomFlgをtrueにし再度for文を使おうと思っているのですが、2回目のfor文のときにunityがフリーズしてしまいます

###該当のソースコード

C#

1 if (IncorrectRandomFlg == true) 2 { 3 4 for (int a = 0; a < 5;) 5 { 6 7 IncorrectRandomNumver = Random.Range(0, IncorrectFigure.Length); 8 9 if (correctRandomNumber == IncorrectRandomNumver) 10 { 11 12 } 13 else if (correctRandomNumber != IncorrectRandomNumver) 14 { 15 randomLocation = Random.Range(0, 6); 16 if (randomLocation == 0 && upperFlg == false) 17 { 18 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(0, 1), Quaternion.identity); 19 upperFlg = true; 20 a++; 21 } 22 else if (randomLocation == 1 && upperRightFlg == false) 23 { 24 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(5, 1), Quaternion.identity); 25 upperRightFlg = true; 26 a++; 27 } 28 else if (randomLocation == 2 && upperLeftFlg == false) 29 { 30 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(-5, 1), Quaternion.identity); 31 upperLeftFlg = true; 32 a++; 33 } 34 else if (randomLocation == 3 && lowerFlg == false) 35 { 36 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(0, -2.5f), Quaternion.identity); 37 lowerFlg = true; 38 a++; 39 } 40 else if (randomLocation == 4 && lowerRightFlg == false) 41 { 42 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(5, -2.5f), Quaternion.identity); 43 lowerRightFlg = true; 44 a++; 45 } 46 else if (randomLocation == 5 && lowerLeftFlg == false) 47 { 48 Instantiate(IncorrectFigure[IncorrectRandomNumver], new Vector2(-5, -2.5f), Quaternion.identity); 49 lowerLeftFlg = true; 50 a++; 51 } 52 53 } 54 } 55 56 IncorrectRandomFlg = false; 57 }

for文をコメントアウトし実行したところ、フリーズすることなく動いてくれたので、for文のところだけ抜粋しました

よろしくお願いします

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

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

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

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

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

guest

回答3

0

自己解決

すいません、凡ミスでした

upperFlgなどをいじったら動くようになりました

投稿2017/08/23 01:28

hunuhunu

総合スコア6

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

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

0

upperFlgなどが一回目のループで全部trueになって、
さらに2回目のループに入る前にfalseにならないとすると、
2回目のループでa++に入る経路がなくなるので無限ループします。

ちなみに、そもそものやりたいことからすると
「位置をランダムに作って重複したら抽選をやり直す」よりも、
「位置のリストをランダムソートする」ほうがコードがスッキリします。

投稿2017/08/23 01:28

編集2017/08/23 01:33
ozwk

総合スコア13521

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

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

0

correctRandomNumber == IncorrectRandomNumver
となることはありえないのですか?

投稿2017/08/23 01:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問