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



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

我正在开发一个小型的飞扬的鸟克隆,就像一个编程挑战。我以前从未使用过 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);
    }
}
我没有

时间进行测试,但我相信这是因为您正在 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;
        }
    } 
}

最新更新