2014-02-26 135 views
0

差不多90%的時間,我的問題已經在這裏解決了。但今天是我第一次問。Unity/C#:開/關音樂GUI按鈕

我正在開發一個小型飛揚的小鳥克隆,就像編程挑戰一樣。我之前從未使用C#或Unity ...

我有一個打開/關閉按鈕,我希望「切換」。到目前爲止,我有這個。除了再次顯示'musicOn'紋理和再次播放音樂的部分外,它工作。

這裏有什麼問題?先謝謝你。

void OnGUI(){ 

    toggleMusicButton(); 

    if(GUI.Button(rect,"", new GUIStyle())){ 
     music.Pause(); 
     musicBool = false; 
    } 

    if(GUI.Button(rect,"", new GUIStyle())){ 
     music.Play(); 
     musicBool = true; 
    } 

} 

void toggleMusicButton(){ 

    if(musicBool){ 
     GUI.DrawTexture(rect, musicOn); 
    } else { 
     GUI.DrawTexture(rect, musicOff); 
    } 

} 
+0

你爲什麼要創建兩個GUI按鈕? –

+0

我剛剛從C#/ Unity開始。我很瞭解事情的運作方式。我的錯。 – oschvr

回答

3

我沒有時間測試,但我相信這是因爲您正在使用OnGUI以外的其他方法進行GUI調用。我認爲OnGUI的通話費用越高越好。

private Texture musicTexture;  

void OnGUI(){ 

    GUI.DrawTexture(rect, musicTexture); 


    if(GUI.Button(rect,"", new GUIStyle())){ 
     if (musicBool) { 
      music.Pause(); 
      musicBool = false; 
      musicTexture = musicOff 
     } 
     else { 
      music.Play(); 
      musicBool = true; 
      musicTexture = musicOn 
     } 
    } 
} 

如果您使用DrawTexture只是爲了改變按鈕的外觀,然後做這樣的事情。

創建2個GUIStyles,併爲您的按鈕正確的紋理他們

public GUIStyle musicOff; //assign a GUIStyle with the correct button image for off 
private GUIStyle musicOn; //assign a GUIStyle with the correct button image for on 
private GUIStyle musicGUIStyle; //holds GUIStyle being displayed. Assign this a default 

void OnGUI(){ 

    if(GUI.Button(rect,"", musicGUIStyle)){ 
     if (musicBool) { 
      music.Pause(); 
      musicBool = false; 
      musicGUIStyle = musicOff; 
     } 
     else { 
      music.Play(); 
      musicBool = true; 
      musicGUIStyle = musicOn; 
     } 
    } 
} 
+0

完美運作。我喜歡這個網站社區。我一有信譽,我就會高興起來。 – oschvr

+0

請允許時標記爲答案。 – Tsukasa