StartCoroutine 没有被调用
StartCoroutine does not get called
我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Enemy : MonoBehaviour {
public GameObject deathEffect;
public float health = 4f;
public static int EnemiesAlive = 0;
public int loadToScene;
void Start ()
{
EnemiesAlive++;
}
void OnCollisionEnter2D (Collision2D colInfo)
{
if (colInfo.relativeVelocity.magnitude > health)
{
Die();
}
}
void Die ()
{
Instantiate(deathEffect, transform.position, Quaternion.identity);
EnemiesAlive--;
if (EnemiesAlive <= 0)
{
Debug.Log ("LEVEL WON!");
StartCoroutine (delay()); //delay here
loadToScene = 1;
SceneManager.LoadScene (loadToScene);
}
Destroy(gameObject);
}
IEnumerator delay ()
{
yield return new WaitForSeconds(2f);
Debug.Log ("Coroutine started?");
}
}
代码是当敌人的数量小于等于0时切换场景。鉴于条件 "EnemiesAlive <= 0" 已满足,我想在更改场景之前添加延迟。我用的是StartCoroutine,不知道什么原因,StartCoroutine没有被调用,场景马上就变了,没有延迟。这是为什么?
"Debug.Log ("级别获胜!");"已读取但 "Debug.Log ("协程已启动?");"没有 运行.
您没有在等待 delay()
完成后才调用 SceneManager.LoadScene (loadToScene);
。当您调用 SceneManager.LoadScene (loadToScene);
时,会停止所有等待 运行 的协程,因此例程会在两秒结束之前停止。
尝试将日志放在 WaitForSeconds
之前,我 认为 你会在场景改变之前得到输出。
如果你想让你的 Die
代码等待两秒钟,你需要让 Die 也 return 一个 IEnumerable 并让出等待,然后用 StartCoroutine
调用 Die
.
void OnCollisionEnter2D (Collision2D colInfo)
{
if (colInfo.relativeVelocity.magnitude > health)
{
StartCoroutine(Die());
}
}
IEnumerator Die ()
{
Instantiate(deathEffect, transform.position, Quaternion.identity);
EnemiesAlive--;
if (EnemiesAlive <= 0)
{
Debug.Log ("LEVEL WON!");
yield return StartCoroutine (delay()); //delay here
loadToScene = 1;
SceneManager.LoadScene (loadToScene);
}
Destroy(gameObject);
}
我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Enemy : MonoBehaviour {
public GameObject deathEffect;
public float health = 4f;
public static int EnemiesAlive = 0;
public int loadToScene;
void Start ()
{
EnemiesAlive++;
}
void OnCollisionEnter2D (Collision2D colInfo)
{
if (colInfo.relativeVelocity.magnitude > health)
{
Die();
}
}
void Die ()
{
Instantiate(deathEffect, transform.position, Quaternion.identity);
EnemiesAlive--;
if (EnemiesAlive <= 0)
{
Debug.Log ("LEVEL WON!");
StartCoroutine (delay()); //delay here
loadToScene = 1;
SceneManager.LoadScene (loadToScene);
}
Destroy(gameObject);
}
IEnumerator delay ()
{
yield return new WaitForSeconds(2f);
Debug.Log ("Coroutine started?");
}
}
代码是当敌人的数量小于等于0时切换场景。鉴于条件 "EnemiesAlive <= 0" 已满足,我想在更改场景之前添加延迟。我用的是StartCoroutine,不知道什么原因,StartCoroutine没有被调用,场景马上就变了,没有延迟。这是为什么?
"Debug.Log ("级别获胜!");"已读取但 "Debug.Log ("协程已启动?");"没有 运行.
您没有在等待 delay()
完成后才调用 SceneManager.LoadScene (loadToScene);
。当您调用 SceneManager.LoadScene (loadToScene);
时,会停止所有等待 运行 的协程,因此例程会在两秒结束之前停止。
尝试将日志放在 WaitForSeconds
之前,我 认为 你会在场景改变之前得到输出。
如果你想让你的 Die
代码等待两秒钟,你需要让 Die 也 return 一个 IEnumerable 并让出等待,然后用 StartCoroutine
调用 Die
.
void OnCollisionEnter2D (Collision2D colInfo)
{
if (colInfo.relativeVelocity.magnitude > health)
{
StartCoroutine(Die());
}
}
IEnumerator Die ()
{
Instantiate(deathEffect, transform.position, Quaternion.identity);
EnemiesAlive--;
if (EnemiesAlive <= 0)
{
Debug.Log ("LEVEL WON!");
yield return StartCoroutine (delay()); //delay here
loadToScene = 1;
SceneManager.LoadScene (loadToScene);
}
Destroy(gameObject);
}