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

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

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

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

Unity

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

Q&A

解決済

1回答

1116閲覧

Unityの動作が停止する

Sukabo

総合スコア31

C#

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

Unity

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

0グッド

1クリップ

投稿2018/01/14 05:47

UnityでコルーチンをするスクリプトをアタッチしてPlayボタンを押すと、Unityアプリケーション自体の動作が停止します。この場合、処理が重いからフリーズしたということでしょうか。ちなみにコルーチン部分をコメントアウトすると普通にゲームがPlayされます。

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

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

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

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

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

fiveHundred

2018/01/14 06:04

これだけだと分からないので、ソースコードを記載してください。
guest

回答1

0

ベストアンサー

「質問への追記・修正の依頼」欄に記載した通り、ソースコードを見ないと実際にどうなっているか分かりませんが、yield returnを適切に使われていないのではないか、と思っています。

Unityの基本的な処理についてはシングルスレッドで動いているため、yield returnで処理を中断させる(あるいは、コルーチンそのものが完了する)まで、他の処理を行うことができません。

例えば、以下のようなソースになっている場合、永遠にyield returnが呼ばれないため、他の処理ができずフリーズしてしまいます。

C#

1IEnumerator TestCoroutine() 2{ 3 // 無限ループ 4 for (;;) 5 { 6 // 処理 7 } 8 9 yield return null; 10}

この場合、以下のように、ループ内の処理の後にyield returnを入れればよいです。

C#

1IEnumerator TestCoroutine() 2{ 3 // 無限ループ 4 for (;;) 5 { 6 // 処理 7 8 yield return null; 9 } 10}

また、重い処理の場合も同様で、例えば1秒間かかる処理をコルーチンの中に書いてしまった場合、その1秒間の間フリーズしてしまいます。
この場合、処理の中の中断してもよいところでyield returnを入れるか、(Unityの機能のほとんどが使えなくなりますが)C#の機能を使ってマルチスレッドで処理する必要があります。

投稿2018/01/14 08:34

fiveHundred

総合スコア9803

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

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

Sukabo

2018/01/14 13:38

ご回答ありがとうございます。補足説明すると、Playボタンを押したら、ふつうはボタンが青色になりますが、なぜか黒色のままでフリーズするということです。つまり、ゲームがスタートすらしないということです。
fiveHundred

2018/01/14 13:57

Start()を無限ループとなる処理を持つコルーチンに書き換えたところ、ボタンが青色になる前にフリーズしましたので、おそらくStart()内で無限ループが起こっているのだと思われます。 というかそれ以前に、「ソースコードを記載して」と言っているのだから記載してください。 ソースがあれば、どこが原因なのか探すことができますが、記載がないとそれができません。 こういう指摘は、大概『解決に必要だと思われるから』しているのです。 (どうしても無理ならその理由を教えてください)
Sukabo

2018/01/18 08:59

たしかに無限ループが原因かもしれないです。ソースコードについてはどうか勘弁してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問