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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

3283閲覧

WaitForSecondsが実行されない

Qoo

総合スコア1249

C#

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

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2019/04/09 14:13

編集2019/04/10 00:47

下記、テスト3のように3秒後に処理を実行するコードを書きたいのですが、うまくいきません、
テスト1、テスト2はきちんとログが表示されますが、テスト3はprint("2")が出力されません。

「unity waitforseconds 動かない」でググってみたのですが、いまだになぜ動かないのか理解できていません。
下記のサイトの10にも同様の事例がありましたが、なぜ動作しないのかという具体的な理由が見つかりませんでした。

https://qiita.com/gamesonytablet/items/20b25ad9729e4a353c96

下記の処理でWaitForSecondsを実行するにはどうすればよいのでしょうか

void FixedUpdate () { if (Input.GetMouseButtonDown(0)) { test(); } } void test() { StartCoroutine(Example()); } //テスト1 IEnumerator Example() { print("1"); //←出力される yield return null; print("2"); //←出力される } //テスト2 IEnumerator Example() { print("1"); //←出力される yield return new WaitForFixedUpdate(); print("2"); //←出力される } //テスト3 IEnumerator Example() { print("1"); //←出力される yield return new WaitForSeconds(3f); print("2"); //←出力されない }

-----追記------
補足:試していることを追記しました。

FixedUpdatedではWaitForFixedUpdateしか使えないということはわかりました。

そこで、下記のようにフラグを用い、Invokeを使ってみましたが
こちらもExampleが実行されません

bool endflag=false; void test() { endflag=true; } void Update(){ if (endflag == true) { endflag=false; Invoke("Example", 5); } } void Example() { print("1");  }

また、下記のようにTime.deltaTimeを用いてみましたが
timeElapsedの値が変化せず、timeOutに入らない(Exampleも実行されません)

bool endflag=false; void test() { endflag=true; } void Update(){ if (endflag == true) {    timeElapsed += Time.deltaTime; if(timeElapsed >= timeOut) { Example(); } } } void Example() { print("1");  }

動かない理由がわかりません。
対処方法も教えて頂けると助かります

-----追記----
UpdatetとFixedUpdateは混在している状況です。
test()はFixedUpdateの中で
Time.timeScale = 0;にした後に実行しています。

どうぞ宜しくお願い致します。

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

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

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

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

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

papinianus

2019/04/09 14:46

qiitaは直後にgameobjectを破棄(Destroy)しているので、WaitForSecondsの後が呼ばれない、という意味の記事だと思います。 FixedUpdateでボタンを検知するのをやめて、Updateでテストしてみてはいかがでしょうか?参考→https://www.clrmemory.com/unity/proper-update-fixedupdate/
papinianus

2019/04/10 00:23

補足していただいたコードでtest()と書いてある部分のコードも追加してください
sakura_hana

2019/04/10 00:36

・テスト1〜3まで、メソッド名が同一ですが実際のテストではこの中の1つだけを記述している(Exampleメソッドが1つだけあって、その中身を書き換えている)という認識でいいですか? ・追記分のスクリプトについて、testメソッドはどう呼んでいるのでしょうか?(このスクリプトだけで見る限り、endflagがtrueになることがないのですが)
yzccdefine

2019/04/10 00:39

追記以降のコードのみが今ある現状でしょうか? 上記のFixedUpdateも混在している状況でしょうか? もし追記以降のコードのみが今ある現状であれば test()はどこで実行されていますか?
sakura_hana

2019/04/10 00:57

・Time.timeScale = 0;にした後、Time.timeScale = 1;に戻してますか?(まぁ本題とは関係無い気もしますが) ・使用しているUnityバージョンの記載をお願いします。
yzccdefine

2019/04/10 01:56 編集

動いてるとは思いたいんですが test()を下記に修正してconsoleで「testメソッド通過した。」がでるかご確認いただけますか? void test() { endflag=true; Debug.Log("testメソッド通過した。"); } FixedUpdateとUpdateは実行タイミングが違うので一旦揃えましょう Updateに左クリック押下時の処理を移してみてください
sakura_hana

2019/04/10 02:24

Unity2018.2.3f1環境下で、1つ目のスクリプト(テスト3)で正常動作することを確認しました。 他のスクリプトが影響しているのではないでしょうか。まずは空っぽのプロジェクトに1つ目のスクリプトだけを入れてテストしてみてください。
guest

回答1

0

自己解決

アドバイスありがとうございます。
空っぽのプロジェクトに1つ目のスクリプトだけを入れてテスト行いました。
Time.timeScale = 0;にしなければ動作することが確認できました。

Time.timeScale = 0;
が時間を止める処理なのでコルーチンのWaitForSecondsも使えなるという認識がありませんでした。
しかも、Time.deltaTimeも使えなくなるんですね。。。

なので、時間経過をTime.unscaledDeltaTimeを使って下記のように解決できました。

timeElapsed += Time.unscaledDeltaTime;;

if (timeElapsed >= timeOut) {

  //処理

}

アドバイス頂きありがとうございました。

投稿2019/04/10 05:46

Qoo

総合スコア1249

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問