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

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

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

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

Unity

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

Q&A

2回答

597閲覧

Unity 一定時間後のシーン切り替えについて yield コールチン

TakenakaRiki

総合スコア16

C#

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

Unity

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

2グッド

0クリップ

投稿2019/02/07 06:14

編集2019/02/07 16:49

オブジェクト破壊後一定時間後にシーンチェンジをしたいのですが
うまくできません

Time.timeで時間取得をしてもコールチンのWaitForSecondsを使ってもシーンチェンジが行われません

上記の条件をなくすと普通にシーンチェンジされます

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Enemy : MonoBehaviour { public float health = 4f; public static int EnemiesAlive = 1; void Start() { EnemiesAlive++; } void Update() { } void OnCollisionEnter2D(Collision2D colInfo) { if (colInfo.relativeVelocity.magnitude > health)  { DestroySound(); SceneChange(); } } void SceneChange() { StartCoroutine("Death"); } IEnumerator Death() { EnemiesAlive--; if (EnemiesAlive <= 0) { yield return new WaitForSeconds(2f); SceneManager.LoadScene("StageClear"); } }
bochan2👍を押しています

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

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

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

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

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

negitama

2019/02/07 15:50

``` と ``` の間にコードを貼り付けるとインデントされて質問を見た人が内容を読み取りやすくなりますよ。 ``` // ここに貼る ```
TakenakaRiki

2019/02/07 16:49

なるほど知りませんでした ありがとうございます
guest

回答2

0

まさかとは思いますが、記載以外の箇所でこのスクリプトのゲームオブジェクトをDestroyしたりはしていないですよね?
(Destroyすると、コルーチンも含めて動作が止まるため)

投稿2019/02/08 05:10

fiveHundred

総合スコア9796

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

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

TakenakaRiki

2019/02/08 06:07

まさかと思い DestroyではなくSetActiv falseにしてみましたが やはりシーンは変わりませんでした
sakura_hana

2019/02/08 06:28

SetActive(false)でもコルーチンは中断されてそのまま消えるんで、当然シーンは変わらないですね……
guest

0

Death()メソッドのyield return new WaitForSeconds(2f);の上の行に
Debug.Log("SceneChange");
という行を追加して、コンソールにこのログが表示されるか確認してください。
もし表示されないならそこに到るまでの条件分岐が満たされていないので各数値を確認してください。

多数表示されるなら(多分こっちだと思いますが)、シーン遷移が毎フレーム呼び出しされているので遷移が完了出来ていません。
bool値とif分岐を追加する等して、(出来ればStartCoroutine("Death");が)一度だけ呼び出されるようにしてください。

投稿2019/02/08 01:59

sakura_hana

総合スコア11427

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

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

TakenakaRiki

2019/02/08 04:51 編集

ありがとうございます Debug.Log("SceneChange"); は一度のみ表示されましたがシーンチェンジだけはしません
sakura_hana

2019/02/08 05:42

デバッグログについて。 「Consoleウィンドウで確認している」「ConsoleウィンドウのCollapseがオフになっている」という状況でログが表示されているという認識でいいですか? また、yield return new WaitForSeconds(2f);の「下の行」に Debug.Log("SceneChangeWait"); と加えるとどうでしょうか?
TakenakaRiki

2019/02/08 06:11

はいコンソールウィンドウに表示されています yield return new WaitForSeconds(2f); の下の行に Debug.Log("SceneChangeWait"); を書いてみたところ コンソールウィンドウに表示されませんででした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問