在我们的Unity游戏项目中,GUI的表现采用NGUI。记录一下我们的处理方式:
需要解决的问题
1、需要处理大量按钮的点击事件
2、需要处理界面跳转事件
3、需要处理界面元素更新事件
解决方案
GUIClickEventReceiver
解决按钮点击事件
GUIManager
管理GUI的跳转与更新
具体实现
Inspector选择事件
在编辑器中为按钮选择点击事件
事件代码结构
主要逻辑
@H_403_37@public @H_403_37@void OnClick () { @H_403_37@bool playSoundEffect = @H_403_37@true; @H_403_37@switch (clickType) { @H_403_37@case ClickType.StartGame: GameManager.instance.startGame (); @H_403_37@break; @H_403_37@case ClickType.Store: GUIManager.instance.showGUI (GUIState.Store); @H_403_37@break; @H_403_37@case ClickType.Stats: GUIManager.instance.showGUI (GUIState.Stats); @H_403_37@break; @H_403_37@case ClickType.DoubleCoinUpgrade: GameManager.instance.upgradePowerUp (PowerUpTypes.DoubleCoin); @H_403_37@break; @H_403_37@case ClickType.CoinMagnetUpgrade: GameManager.instance.upgradePowerUp (PowerUpTypes.CoinMagnet); @H_403_37@break; @H_403_37@case ClickType.InvincibilityUpgrade: GameManager.instance.upgradePowerUp (PowerUpTypes.Invincibility); @H_403_37@break; @H_403_37@case ClickType.AddSpeedUpgrade: GameManager.instance.upgradePowerUp (PowerUpTypes.AddSpeed); @H_403_37@break; @H_403_37@case ClickType.ProtectionCoverUpgrade: GameManager.instance.upgradePowerUp(PowerUpTypes.ProtectionCover); @H_403_37@break; @H_403_37@case ClickType.AttackGunUpgrade: GameManager.instance.upgradePowerUp(PowerUpTypes.AttackGun); @H_403_37@break; @H_403_37@case ClickType.EndGame: GUIManager.instance.showGUI (GUIState.EndGame); @H_403_37@break; @H_403_37@case ClickType.Restart: GameManager.instance.restartGame (@H_403_37@true); @H_403_37@break; @H_403_37@case ClickType.MainMenu: GameManager.instance.backToMainMenu (@H_403_37@false); @H_403_37@break; @H_403_37@case ClickType.MainMenuRestart: GameManager.instance.backToMainMenu (@H_403_37@true); @H_403_37@break; @H_403_37@case ClickType.Pause: GameManager.instance.pauseGame (@H_403_37@true); playSoundEffect = @H_403_37@false; @H_403_37@break; @H_403_37@case ClickType.Resume: GameManager.instance.pauseGame (@H_403_37@false); @H_403_37@break; @H_403_37@case ClickType.ToggleTutorial: GameManager.instance.toggleTutorial (); @H_403_37@break; @H_403_37@case ClickType.Missions: GUIManager.instance.showGUI (GUIState.Missions); @H_403_37@break; } @H_403_37@if (playSoundEffect) AudioManager.instance.playSoundEffect (SoundEffects.GUITapSoundEffect); }