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

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

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

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

Q&A

解決済

2回答

3577閲覧

コルーチンを実行するとUnityがフリーズしてしまいます

Timgun

総合スコア18

Unity

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

0グッド

0クリップ

投稿2019/02/23 05:20

Unityとプログラムを始めて間もない初心者です。
コルーチンを始めて使用してみたのですが、下記の問題が解決できず困っています。
コルーチンの使い方が理解できていないのかもしれません。
何かヒントでもいただけると大変助かります。

◇&& maincamera.transform.position.y < 10 の条件でUnityがフリーズ

ifの中に、
&& maincamera.transform.position.y < 10
を加えて実行すると、条件を満たしたときに、Unityがフリーズします。
別のPCで試してみても同じ状態でした。

Create_hoshi(); を単独で実行した場合は、問題なく動きます。

C#

1 void Start() 2 { 3 4 // メインカメラ取得 5 maincamera = Camera.main.gameObject; 6 7 // コルーチンを設定 8 StartCoroutine(Hoshi_manager()); 9 } 10 11 12 private IEnumerator Hoshi_manager() 13 { 14 // ループ 15 16 while (true) 17 { 18 if (maincamera.transform.position.y > -5 && maincamera.transform.position.y < 10) 19 { 20 // 5秒毎にループします 21 yield return new WaitForSeconds(7f); 22 Create_hoshi(); 23 //Debug.Log("コルーチン実行"); 24 } 25 } 26 27 } 28 29 30 private void Create_hoshi() 31 { 32 }

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

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

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

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

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

guest

回答2

0

maincamera.transform.position.y の値がどうなってるかみてみればどうでしょう

結局この条件文にあうことがなくなくなったため、無限ループになってしまっているんでしょう

投稿2019/02/23 06:13

y_waiwai

総合スコア87747

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

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

Timgun

2019/02/24 02:38

ご回答をいただきまいして、ありがとうございます。 なるほど、そうなんですね。 具体的にどう修正したら良いかわからなかったので、 fiveHundredさんにいただいた内容の方を試してみます。
guest

0

ベストアンサー

コルーチンをyield return ~;で中断しない限り、他の処理を行うことが出来ません。
そして、yield return ~;はif文の中にあるため、一度その条件外になると、yield return ~;にたどりつくことが永遠に不可能となるため、フリーズします。
そのため、if文が満たされなかった場合でも、yield return ~;を実行するようにすればよろしいかと思います。

投稿2019/02/23 06:48

fiveHundred

総合スコア9796

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

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

Timgun

2019/02/24 02:35

ご回答をいただきまして、ありがとうございます。 いただいた内容で試してみます。
Timgun

2019/02/24 03:15

下記にしてみたところ、うまくいきました! ありがとうございます。 ```C# private IEnumerator Hoshi_manager() { // ループ while (true) { if (maincamera.transform.position.y > -5 && maincamera.transform.position.y < 10) { // 5秒毎にループします yield return new WaitForSeconds(7f); Create_hoshi(); //Debug.Log("コルーチン実行"); } else { //コルーチンを終了 yield break; Create_hoshi(); } } } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問