Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
团结C#等待,然后行动_C#_Animation_Unity3d - Fatal编程技术网

团结C#等待,然后行动

团结C#等待,然后行动,c#,animation,unity3d,C#,Animation,Unity3d,我正在完成Unity的太空射击课程,我已经到了有小行星向我飞来的地步,我可以摧毁它们 当小行星检测到触发碰撞时,它会触发“showExplosion”方法。问题是,在我们销毁游戏对象并实例化爆炸后,爆炸仍然是一个对象 这显然是一种不好的做法 我需要做的(我认为)是等待动画完成,然后销毁对象 现在我假设有一个事件我可以听。。。我也很高兴知道 但是我如何简单地说等待X秒,然后销毁爆炸对象。有几种方法可以做到这一点,但最简单的方法是使用destroy中的第二个参数,即销毁时间 例如Destroy(my

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

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

这显然是一种不好的做法

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

现在我假设有一个事件我可以听。。。我也很高兴知道


但是我如何简单地说等待X秒,然后销毁爆炸对象。

有几种方法可以做到这一点,但最简单的方法是使用destroy中的第二个参数,即销毁时间

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

因此,在asteroid脚本中,在实例化爆炸的那一刻,调用
Destroy(explosionObject,10F)(给爆炸足够的时间来完成,是否在场景中停留更长时间并不重要)

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


如果您需要等待,那么就执行更通用的操作(不仅仅是销毁),您可以使用

通过使用协同程序,您可以执行类似的操作

IEnumerator DestroyObjectAfterSeconds()
{
   yield return new WaitForSeconds(timeInSeconds);
   //DestroyObject here
}
在showExplosion方法调用中

 StartCoroutine("DestroyObjectAfterSeconds");

如果要等待动画完成,然后销毁游戏对象,可以在unity中向销毁动画添加事件。为此,请单击已销毁动画的游戏对象,然后转到顶部栏的窗口,或按command+6并打开动画窗口。现在,您可以选择动画的最后一帧,并可以将事件添加到动画的最后一帧。通过这种方式,您可以在动画完成时销毁游戏对象。:)

这是什么意思。我假设5帧?它是以秒为单位的时间5f表示5秒f用于浮点运算。
void OnTriggerEnter(Collider other){if(other.tag==“Boundry”| | other.tag==“Player”){return;}Destroy(other.gameObject);Destroy(gameObject);gameObject exp=实例化(爆炸、变换.position、变换.rotation)作为游戏对象;Start例程(DestroyObjectAfterSeconds(exp,1));}IEnumerator DestroyObjectAfterSeconds(Object objectToDestroy,float waitTime){返回新的WaitForSeconds(waitTime);Destroy(objectToDestroy);}
上述方法无效这对我有效检查您是否会犯任何其他错误。这对我无效。。我可能错了,但是如果你在做某事之前回来,它不会做下面的事情吗?这对我不起作用。。我可能错了,但如果你在做某件事之前就回来了,它不会做下面的事情吗?这不是简单的回报,而是收益率回报。。当您调用Start例程(“DestroyObjectAfterSeconds”)时,它将执行上面编写的任何代码,并返回新的WaitForSeconds(TimeUnseconds);语句,然后返回并等待秒,然后返回此函数并执行在返回新的WaitForSeconds(TimeInsectonds)后编写的语句;这就是它的工作原理。