2017-07-07 34 views
0

我遇到了我的代碼問題。 只有第一個if語句被調用。 我知道我的水平正在提高,但是在第一條語句被調用並且水平增加後,即使分數低於要求,仍然顯示繼續按鈕。Unity3D如果聲明被調用,只有一個

private void PlayBuzzer() 
{ 
    GetComponent<AudioSource>().PlayOneShot(buzzer); 
    timeRemaining -= 1; 
    endPanel.SetActive(true); 
    if (PlayerScore.score >= 15 && level == 1) // THIS ONE WORKS 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
// EVERYTHING BELOW HERE DOES NOT - Score Below 35 still shows 'Continue' 
    else if (PlayerScore.score >= 35 && level == 2) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 45 && level == 3) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 70 && level == 4) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 120 && level == 5) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 160 && level == 6) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 230 && level == 7) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else if (PlayerScore.score >= 300 && level == 8) 
    { 
     GameObject.Find("Restart").SetActive(false); 
     GameObject.Find("Continue").SetActive(true); 
    } 
    else 
    { 
     GameObject.Find("Restart").SetActive(true); 
     GameObject.Find("Continue").SetActive(false); 
    } 
    Time.timeScale = 0; 
} 
+0

兩件事: 1.如果分數是40並且等級大於1,那麼是第一個? 2.另外,當我進入第一個案例時,我是否設置了一個斷點,以及'level'變量的實際值? –

+1

請在發佈之前調試您自己的代碼。所有'if' /'else'語句都做同樣的事情,所以你不會真正知道哪一個工作或不工作。在每個if語句中放入'Debug.Log',然後告訴我們發生了什麼。 – Programmer

回答

0

好了不知道哪裏PlayBuzzer()被調用,如果水平之前或之後增加,發現問題真的很難。你有沒有調試過程序?

反正我把自由縮短你的功能,爲了遵循DRY原則:

private void PlayBuzzer() 
{ 
    GetComponent<AudioSource>().PlayOneShot(buzzer); 
    timeRemaining -= 1; 
    endPanel.SetActive(true); 
    var scores = new List<int> { 15, 35, 45, 70, 120, 160 }; 
    var mustRestart = PlayerScore.score < scores[level - 1]; 
    GameObject.Find("Restart").SetActive(mustRestart); 
    GameObject.Find("Continue").SetActive(!mustRestart); 
    Time.timeScale = 0; 
} 

你必須使的保證你的等級爲1,scores.Count之間。