2016-05-17 86 views
0

我試圖在腳本TrippleBall中的方法返回0時切換場景。我知道它在適當的時候返回0,因爲我已經測試了它。這裏是我的代碼來切換場景:觸發器不在Unity中激活

void OnTriggerEnter(Collider col) 
{ 
    if (col.gameObject.tag == "ball") 
    { 
     col.gameObject.GetComponent<Ball>().setIsOffScreen(true); 
     /*error*/ if (GameObject.Find("TrippleBalls").GetComponent<TripleBall>().getBallCount() == 0) { 

      Debug.Log("Loading next screen..."); 
      SceneManager.LoadScene("GameOverScene"); 
     } 

    } 

} 

這裏是一個圖像顯示,其中TrippleBalls

enter image description here

腳本TrippleBall是在組件TrippleBalls

這裏是一個圖像顯示上面的代碼位於何處。

enter image description here

上面的代碼是在一個稱爲類已經投入LBackBoardRBackBoard

當我測試的代碼,並且getBallCount返回0(以滿足條件以上)我得到以下錯誤:

Object reference not set to an instance of an object

此錯誤行送我到我打上error在上面的代碼中。

如果任何人都可以幫我弄清楚,那就太棒了。謝謝!

回答

3

您的GameObject在場景中被命名爲TrippleBall,但您正在場景中尋找TrippleBalls。只需將GameObject.Find("TrippleBalls")更改爲GameObject.Find("TrippleBall");即可。

另請勿在OnTrigger函數中使用GameObject.Find。它會減慢你的遊戲速度。在一個局部變量中使用TripleBall,然後你可以重新使用它。

TripleBall myTripleBall = null; 

void Strt(){ 
//Cache TripleBall 
myTripleBall = GameObject.Find("TrippleBalls").GetComponent<TripleBall>() 
} 

現在您可以隨時重新使用它。

void OnTriggerEnter(Collider col) 
{ 
    if (col.gameObject.tag == "ball") 
    { 
     Debug.Log("COUNT IS: "+myTripleBall.getBallCount()); 
     col.gameObject.GetComponent<Ball>().setIsOffScreen(true); 
     if (myTripleBall.getBallCount() == 0) { 

      Debug.Log("Loading next screen..."); 
      SceneManager.LoadScene("GameOverScene"); 
     } 
    } 
} 

確保添加GameOverScene場景在構建設置。 enter image description here

建議:你 的建議是,對裏面的另一個遊戲物體,使用「/」另一個遊戲物體看時,就像您在一個文件夾路徑。例如,TrippleBall在Specialties GameObject下。因此,使用GameObject.Find("Specialties/TrippleBall");而不是GameObject.Find("TrippleBall");

+0

錯誤消失,但它仍然沒有打印或更改場景 – Luke

+0

@Luke請確保在您的生成設置中添加GameOverScene場景。 – Programmer

+0

我做了所有這一切,但仍然無法正常工作。我甚至測試了加載下一個場景,並且工作。 – Luke