2016-10-27 99 views
0

我已經在destroy中創建了一個gameObject,並且在此對象上以2秒的延遲持續時間調用了Destroy()方法。取消延遲對GameObject的Destroy()調用

Destroy(gameObject,2.0f);

我要的是,如果用對撞機另一個遊戲物體與該遊戲物體發生碰撞,我想取消毀滅呼籲這個特殊的遊戲對象。

我試着用新的持續時間在同一個gameobject上再次調用destroy,但它仍然基於舊的持續時間被破壞。

void OnCollisionEnter2D(Collision2D coll) 
{ 
    //Debug.Log("Inside Enter"); 
    if (coll.gameObject.tag == "Ball") 
    { 
     Destroy(gameObject, reInitializeLifeOfLine); 
     Debug.Log("Inside Enter"); 
    } 
} 

可有人請建議如何實現這一

+0

你能解決這個問題嗎?如果現有答案不符合您的要求,請務必更新您的問題或添加評論。 – Serlite

回答

1

沒有內置的方式,以防止遊戲物體的破壞你叫Destroy()後。然而,其他人已經探索過的各種解決方法可以完全實現您的需求。

這裏有一個簡單的使用Invoke()(改編自Unity Answers),您可以手動取消:

void OnCollisionEnter2D(Collision2D coll) 
{ 
    if (coll.gameObject.tag == "Ball") 
    { 
     CancelInvoke("DestroySelf"); 
     Invoke("DestroySelf", reInitializeLifeOfLine); 
    } 
} 

void DestroySelf() { 
    Destroy(gameObject); 
} 

希望這有助於!如果您有任何問題,請告訴我。

+0

這並沒有解決我的問題。仍然有物體被最初的延遲破壞。所以要解決這個問題,我使用了定時器。有關詳情,請參閱我的答案 –

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; 
    } 
} 

解決了這個問題,我創建一個浮動變量startTime和在Start()方法初始化它。 現在在FixedUpdate中,我正在檢查是否有5秒鐘過去了。如果是,則銷燬該物體。

現在對於碰撞部分,我正在檢查OnCollisionEnter2D()。如果對象與碰撞器進行交互,我將爲當前時間的startTime重新賦值。

這解決了我的問題