我正在制作手机游戏,我需要在销毁对象后显示短信5秒钟。我尝试使用yield waitforseconds但是不起作用。我也尝试过使用Invoke功能。我用行代码SceneManager.LoadScene(“__ Main1”)创建了一个单独的函数;但我有同样的问题。
我想显示我的文字5秒钟,然后加载新场景。
这是我现在的代码:
void OnTriggerEnter2D (Collider2D other)
{
if (other.gameObject.CompareTag ("bomb")) {
other.gameObject.SetActive (false);
Destroy (this.gameObject);
scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
SceneManager.LoadScene ("__Main1");
}
我希望有人可以帮忙解决这个问题。感谢。
答案 0 :(得分:2)
你无法破坏对象并在其上启动协同程序。您需要引用此文本的其他对象,并在执行协程时保持活动状态。
编辑:
更确切地说:
void OnTriggerEnter2D (Collider2D other)
{
if (other.gameObject.CompareTag ("bomb")) {
other.gameObject.SetActive (false);
scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
waitEndDisable.WaitAndDisable(scoretext); // here we go ;)
Destroy (this.gameObject);
}
在其他脚本上,这是在活动 GameObject:
上运行public void WaitAndDisable(GameObject obj)
{
StartCoroutine(WaitAndDisableCoroutine(obj));
}
IEnumerator WaitAndDisableCoroutine(GameObject obj)
{
yield return new WaitForSeconds(5f);
SceneManager.LoadScene ("__Main1");
obj.SetActive(false);
}
正如您在主脚本中所看到的,您需要使用 WaitAndDisable 方法引用该脚本。确保此对象处于活动状态(gameObject.activeSelf == true)。
答案 1 :(得分:0)
您可以使用Enumerator等待几秒钟。
void OnTriggerEnter2D (Collider2D other)
{
if (other.gameObject.CompareTag ("bomb"))
{
other.gameObject.SetActive(false);
StartCoroutine(Foo());
}
}
IEnumerator Foo()
{
scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
yield return new WaitForSeconds(5f);
SceneManager.LoadScene ("__Main1");
}
您应该使用System.Collections添加枚举器。