gpt4 book ai didi

c# - Invoke() 没有被调用

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:46 26 4
gpt4 key购买 nike

我的代码:

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!");
Invoke("ChangeScene",2f);
}
Destroy(gameObject);
}

void ChangeScene()
{
Debug.Log ("Hello");
loadToScene = 1;
SceneManager.LoadScene (loadToScene);
}
}

谁能告诉我为什么Invoke()不起作用?一旦条件(EnemiesAlive <= 0),我想在更改场景之前添加 2 秒延迟实现了。 Debug.Log ("LEVEL WON!");Debug.Log ("Hello"); 时输出不是。我知道我可以使用 StartCoroutine也不过我想用 Invoke()反而。

最佳答案

问题是 Invoke 实际上被调用了,但是你的对象在被调用的方法执行之前被销毁了。
要解决此问题,请将 Destroy(gameObject) 移至 ChangeScene 方法:

void Die ()
{
Instantiate(deathEffect, transform.position, Quaternion.identity);
EnemiesAlive--;

if (EnemiesAlive <= 0)
{
Debug.Log ("LEVEL WON!");
Invoke("ChangeScene",2f);
}
}

void ChangeScene()
{
Debug.Log ("Hello");
loadToScene = 1;
Destroy(gameObject);
SceneManager.LoadScene (loadToScene);
}

您可以选择使用 Destroy 方法的重载来指定对象将被销毁的时间:Destroy(gameObject, 1.0f)(将在一个之后销毁对象第二个)。

关于c# - Invoke() 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com