我在destroy中创建了一个gameObject,并在此对象上调用了Destroy()方法,延迟时间为2秒。
Destroy(gameObject,2.0f);
我想要的是,如果另一个带有对撞机的游戏对象与此游戏对象发生碰撞,我想取消对此特定游戏对象的销毁调用。
我试图在同一个游戏对象上再次使用新的持续时间调用destroy,但它仍然会根据旧的持续时间被破坏。
void OnCollisionEnter2D(Collision2D coll)
{
//Debug.Log("Inside Enter");
if (coll.gameObject.tag == "Ball")
{
Destroy(gameObject, reInitializeLifeOfLine);
Debug.Log("Inside Enter");
}
}
有人可以建议如何实现这个
答案 0 :(得分:1)
调用Destroy()
后,没有内置方法可以防止GameObject的破坏。但是,其他人已经探索过各种解决方案,这些解决方案可以完全满足您的需求。
这是一个简单的(改编自Unity Answers),使用Invoke()
,您可以手动取消:
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Ball")
{
CancelInvoke("DestroySelf");
Invoke("DestroySelf", reInitializeLifeOfLine);
}
}
void DestroySelf () {
Destroy(gameObject);
}
希望这有帮助!如果您有任何问题,请告诉我。
答案 1 :(得分:1)
我使用以下代码
解决了这个问题float reInitializeLifeOfObject = 5.0f;
float lifeTimeOfObject = 3f;
private float startTime;
void Start()
{
startTime = Time.time;
}
void FixedUpdate()
{
// This will destroy the gameObject in 5 second
if((Time.time - startTime) > lifeTimeOfObject)
{
Destroy(gameObject.transform.parent.gameObject);
}
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Ball")
{
// Re-initializing the startTime so that Object is not abruptly destroy while ball is still
// interacting with game object
startTime = Time.time;
}
}
我创建了一个float变量startTime
并在Start()方法中初始化它。
现在在FixedUpdate中,我正在检查是否已经过了5秒。如果是,则销毁该对象。
现在对于碰撞部分,我正在检查OnCollisionEnter2D()。如果object正在与一个collider进行交互,那么我将使用当前时间为startTime重新赋值。
这解决了我的问题