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

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

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

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

Unity

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

Q&A

解決済

2回答

9815閲覧

コルーチンが1度しか呼ばれない

GOTOken

総合スコア54

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2018/07/19 03:07

C#

1Start() 2{ 3StartCorutine(関数名()); 4} 5IEnumerator 関数名() 6{ 7//処理 8yield return new WaitForSeconds(指定時間); 9}

このように記述することで、コルーチンを動かせると聞きました。が、同様な記載の仕方でスクリプトを書いたのですが、処理が最初にしか呼び出されていません。
この場合は、何故1回しか呼び出されないんでしょうか??

自分は個々のオブジェクトに時間指定をしたいと考えたので、

public float 時間指定する変数

を、指定時間に入れてました。結果は両方とも変わらず、動きませんでした。

どのようにしたら、指定時間になったら呼び出されて。を繰り返されるようになるのかご教授してくれると嬉しいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

コルーチンの詳細については長くなるので書きませんが、ざっくりいうと、Updateと似たタイミングでUnity側でコルーチンを実行する仕組みがあります。

ありますが、これは「コルーチンが生きている間は」呼び続けられるものです。
なので今回のコード例では、最初の処理が終わったタイミングでコルーチンは終了してしまいます。

通常のメソッドと同様、メソッドの終端まで行った時点で処理が終了するためです。
逆を返せば、処理が終わらなければ常に実行され続けます。

なので、whileを用いて以下のようにループ処理を記述することで目的が達成できると思います。

while (true) { yield return new WaitForSeconds(指定時間); // なにがしかの処理 }

こうすることで指定時間が過ぎたあと該当の処理が実行され、whileの無限ループによりまた指定時間停止、その後処理が開始され・・と常に実行され続けます。

投稿2018/07/19 08:24

edo_m18

総合スコア2283

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

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

GOTOken

2018/07/19 10:05

なるほど!while文ですね!それで、WaitForSecondsで指定した時間待ち、ループ処理が出来ると。 となると、指定回数分Corutineを回すなら、for文を使ってあげれば良い。ということであってますか??
edo_m18

2018/07/19 10:14

そうですね! その認識で合ってます。
GOTOken

2018/07/19 10:18

ありがとうございます!これで、コルーチンでの処理等を理解することが出来ました!????
guest

0

毎フレーム繰り返したいのでしたら
StartではなくUpdateで書かないと繰り返されません

ただ一定時間経過に繰り返し実行したいのであればコルーチンを用いるのではなくTime.deltaTimeの方が良いのではないでしょうか

C#

1float count = 0; 2 3Update(){ 4 count += Time.deltaTime; 5 if(count >= 指定時間){ 6 //処理 7 } 8}

投稿2018/07/19 06:59

Romira

総合スコア47

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

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

GOTOken

2018/07/19 08:11

なるほどなるほど。 StartCorutineはStartに記述される理由があまり理解を深めれていないのですが、どのような理由かわかり余すか・・・?
edo_m18

2018/07/19 08:19

Startに書かないとならない、という決まりはありません。 Start Coroutineの名前の通り、こちらは「コルーチンを開始する」という意味のメソッドです。 なのでStartに限らず、コルーチンを実行したいタイミングで呼び出し、コルーチンを実行させることができます。 おそらく今回のケースの場合は「開始してすぐにコルーチンを呼び出したい」ということから、Start内に書かれているのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問