Unity c#等等再做

本文关键字:Unity | 更新日期: 2023-09-27 18:05:55

我正在完成Unity的太空射击课程,我已经到了小行星向我飞来的地步,我可以摧毁它们。

当小行星检测到触发碰撞时,它会触发"showExplosion"方法。问题是,在我们销毁游戏对象并实例化爆炸之后,爆炸仍然是一个对象。

这显然是不好的做法。

我需要做的(我认为)是等待动画完成,然后销毁对象。

现在我假设有一个事件我可以监听…我也很想知道这一点。

但是我怎么简单地说等待X秒然后销毁爆炸对象呢

Unity c#等等再做

通过使用协程,您可以做这样的事情。

IEnumerator DestroyObjectAfterSeconds()
{
   yield return new WaitForSeconds(timeInSeconds);
   //DestroyObject here
}

中的showExplosion方法调用

 StartCoroutine("DestroyObjectAfterSeconds");

如果你想等待动画完成,然后销毁游戏对象,你可以在unity中为你的销毁动画添加一个事件。为此,点击带有破坏动画的游戏对象,然后转到顶部栏的窗口或按下command + 6并打开动画窗口,现在选择最后一帧动画,您可以在动画的最后一帧中添加事件。这样你就可以在动画完成后销毁你的游戏对象。:)

有几种方法可以做到这一点,但最简单的方法是使用Destroy中的第二个参数,即time to Destroy

例如,Destroy(myGameObject,5F);将在5秒后摧毁游戏对象。

所以,在小行星脚本中,在你实例化爆炸的那一刻,调用Destroy(explosionObject,10F);(给爆炸足够的时间来完成,如果在场景中停留更长一点并不重要)

我认为它应该正常工作,如果不是,你可以使用一个独立的脚本在爆炸,调用Destroy(this.gameobject,10F)在Start()方法

如果你想要一个等待,然后做更多的通用(不仅仅是Destroy),你可以使用协程