几乎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;
}
}
}