下記、テスト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;にした後に実行しています。
どうぞ宜しくお願い致します。

回答1件
あなたの回答
tips
プレビュー