取消游戏对象上延迟的Destroy()调用
本文关键字:Destroy 调用 延迟 游戏 对象 取消 | 更新日期: 2023-09-27 18:15:12
我在destroy中创建了一个gameObject,并在这个对象上调用了destroy()方法,延迟时间为2秒。
Destroy(gameObject,2.0f);
我想要的是,如果另一个带有碰撞器的gameObject与这个gameObject碰撞,我想要取消对这个特定gameObject的destroy调用。
我尝试在相同的游戏对象上使用新的持续时间再次调用destroy,但它仍然会根据旧的持续时间被销毁。
void OnCollisionEnter2D(Collision2D coll)
{
//Debug.Log("Inside Enter");
if (coll.gameObject.tag == "Ball")
{
Destroy(gameObject, reInitializeLifeOfLine);
Debug.Log("Inside Enter");
}
}
谁能建议如何实现这个
没有内置的方法来防止在你调用Destroy()
后破坏游戏对象。然而,其他人已经探索了各种各样的解决方法,这些方法可以达到您所需要的效果。
这是一个简单的(改编自Unity Answers)使用Invoke()
,你可以手动取消:
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Ball")
{
CancelInvoke("DestroySelf");
Invoke("DestroySelf", reInitializeLifeOfLine);
}
}
void DestroySelf () {
Destroy(gameObject);
}
希望这对你有帮助!如果您有任何问题,请告诉我。
我使用下面的代码解决了这个问题
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;
}
}
我创建了一个浮动变量startTime
,并在Start()方法中初始化它。现在在fixeduupdate中,我正在检查是否已经过去了5秒。如果是,则销毁该对象。
现在对于碰撞部分,我正在检查OnCollisionEnter2D()。如果对象与碰撞器交互,我将用当前时间重新分配startTime的值。
这就解决了我的问题