Unity / C#:开/关音乐GUI按钮

时间:2014-02-26 16:37:12

标签: c# unity3d

几乎90%的时间,我的问题在这里已经解决了。但今天是我第一次问。

我正在开发一个小型的鸟类克隆,就像编程挑战一样。我之前从未使用过C#或Unity ......

我有一个ON / OFF按钮,我希望“切换”。到目前为止,我有这个。它的工作原理除了再次显示'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);
    }

}

1 个答案:

答案 0 :(得分: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;
        }
    } 
}