2013-05-26 81 views
0

我試圖使用幫助函數爲了使函數暫停幾秒鐘,但它不執行等待函數。在觸發函數內部使用幫助函數

這就是我一直在使用的代碼:

代碼:

public class Triggers : MonoBehaviour { 
    IEnumerator wait(float seconds) { 
     Debug.Log("In wait"); 
     yield return new WaitForSeconds(seconds); 
     Debug.Log("after wait"); 
    } 

    void OnTriggerEnter(Collider _collider) 
    { 
     Debug.Log("Destroy"); 
     gameObject.SetActive(false); 
     Debug.Log("Before wait"); 
     wait(5); 
     Debug.Log("activate"); 
     gameObject.SetActive(true); 
    } 
} 

我會很感激一些幫助。

回答

2

我解決它通過只停用子對象,它是實際的「物理」的對象,我想隱藏的是無形的碰撞父對象。因此,現在父對象保持活動狀態,計算時間並且物理對象「立方體」顯示並在n秒後重新出現。

public class Triggers : MonoBehaviour 
{ 
    IEnumerator wait (float seconds) 
    { 
     Debug.Log ("In wait"); 
     GameObject go = GameObject.Find ("Cube"); 
     go.SetActive(false); 
     yield return new WaitForSeconds(seconds); 
     Debug.Log ("after wait"); 
     go.SetActive (true); 
    } 

    void OnTriggerEnter (Collider _collider) 
    { 
     Debug.Log ("Destroy"); 
     Debug.Log ("Before wait"); 
     StartCoroutine (wait (5)); 
     Debug.Log ("activate"); 

    } 
+0

幹得好。感謝您發佈最終結果。 ;-) –

0

試試這個:

StartCoroutine(wait(5)); 

而不是簡單地 「等待(5)」。

這是協程在C#中的工作方式,如果我記得很清楚......

+0

它給我錯誤,因爲遊戲對象是不活動的,Coroutine無法啓動。其他解決方案? – Red

+0

如果這不符合您的預期,可以嘗試將腳本附加到對象層次結構中的另一個「Monobehaviour」。 –

+0

如果您將腳本附加到空的父'GameObject',並激活/停用您的'gameObject'會發生什麼情況,該對象將作爲此空對象的子對象移動? –